[英]Wrong output in parsing Date from DateFormat Using Calendar
我的代碼有什么問題我無法從我想要解析的日期時間獲得確切的輸出?
String convertDate="03/19/2014 5:30:10 PM";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.CANADA);
Date myDate=new Date();
try {
myDate=df.parse(convertDate);
final Calendar c = Calendar.getInstance();
c.setTime(myDate);
System.out.println("Year = " + c.get(Calendar.YEAR));
System.out.println("Month = " + (c.get(Calendar.MONTH)));
System.out.println("Day = " + c.get(Calendar.DAY_OF_MONTH));
} catch (ParseException e1) {
e1.printStackTrace();
}
我的輸出是
- 04-28 03:07:15.322: I/System.out(25095): Year = 2015
- 04-28 03:07:15.322: I/System.out(25095): Month = 6
- 04-28 03:07:15.322: I/System.out(25095): Day = 3
肯定是
- Year = 2014
- Month = 03
- Day = 19
從此更改您的日期格式
dd/MM/yyyy HH:mm:ss
對此
MM/dd/yyyy HH:mm:ss
月份是基於Zero (0)
索引的。 因此,在檢索月份索引后,您必須添加1
才能獲得當前月份。
因此,嘗試按如下方式打印當前月份...
int currentMonth = c.get(Calendar.MONTH) + 1;
System.out.println("Month = " + currentMonth);
或者
System.out.println("Month = " + (c.get(Calendar.MONTH)+1));
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.CANADA);
現在嘗試......它會起作用。
有了這個,你必須在你的月份加 1。 代碼在這里:
String convertDate="03/19/2014 5:30:10 PM";
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.CANADA);
Date myDate=new Date();
try {
myDate=df.parse(convertDate);
final Calendar c = Calendar.getInstance();
c.setTime(myDate);
int y,m,d;
y=Calendar.YEAR;
System.out.println("Year = " + c.get(Calendar.YEAR));
//Log.d("Year", y);
System.out.println("Month = " + (c.get(Calendar.MONTH)+1));
System.out.println("Day = " + c.get(Calendar.DATE));
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
你在解析時犯了兩個錯誤:
MM
與dd
交換。H
而不是h
來解析帶有 AM/PM 標記的日期時間字符串。 符號H
用於解析 24 小時格式的時間字符串。 另一個需要考慮的重要一點是,PM寫成pm
在Locale.CANADA
。 對於您的時間字符串,您可以使用Locale.US
其指定為 PM。因此,您可以使用如下所示的解析器:
new SimpleDateFormat("M/d/u h:m:s a", Locale.US)
其中a
已用於解析 AM/PM。
使用此解析器將解決您的問題,但舊的日期時間 API( java.util
日期時間類型及其格式化 API, SimpleDateFormat
)已過時且容易出錯。 建議完全停止使用它並切換到java.time
, 現代日期時間 API * 。
使用現代日期時間 API 的演示:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
String convertDate = "03/19/2014 5:30:10 PM";
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("M/d/u h:m:s a", Locale.US);
LocalDateTime ldt = LocalDateTime.parse(convertDate, dtfInput);
System.out.printf("Year: %d, Month: %d, Day: %d%n", ldt.getYear(), ldt.getMonthValue(), ldt.getDayOfMonth());
// Or, using DateTimeFormatter
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("'Year:' uuuu, 'Month:' M, 'Day:' d", Locale.US);
System.out.println(ldt.format(dtfOutput));
}
}
輸出:
Year: 2014, Month: 3, Day: 19
Year: 2014, Month: 3, Day: 19
從Trail: Date Time 中了解有關現代日期時間 API * 的更多信息。
* 出於任何原因,如果您必須堅持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport,它將大部分java.time功能向后移植到 Java 6 和 7。如果您正在為 Android 項目和您的 Android API 工作級別仍然不符合 Java-8,請檢查 通過 desugaring和How to use ThreeTenABP in Android Project 可用的 Java 8+ APIs 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.