[英]Java: Wrong hour from Calendar instance?
正在運行:
public class test {
@Test
public void displayDate() {
SimpleDateFormat MONTH_FORMAT = new SimpleDateFormat("MMM", Locale.getDefault());
String testDateStr = "2017-07-01T07:58:23.000Z";
Calendar calendar = getFormatedDate(testDateStr);
int yearInt = calendar.get(Calendar.YEAR);
String monthStr = MONTH_FORMAT.format(calendar.getTime()).toUpperCase();
int monthInt = calendar.get(Calendar.MONTH);
int dayInt = calendar.get(Calendar.DAY_OF_MONTH);
int hour24 = calendar.get(Calendar.HOUR_OF_DAY);
int min = calendar.get(Calendar.MINUTE);
int sec = calendar.get(Calendar.SECOND);
System.out.println(testDateStr);
System.out.println(String.format("%s-%s-%s %s:%s:%s", yearInt, monthStr, dayInt, hour24, min, sec));
System.out.println(String.format("%s-%s-%s %s:%s:%s", yearInt, monthInt, dayInt, hour24, min, sec));
}
private Calendar getFormatedDate(String dateStr) {
Instant instant;
try {
instant = Instant.parse(dateStr);
} catch (DateTimeParseException e) {
e.printStackTrace();
return null;
}
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
Calendar calendar = GregorianCalendar.from(zdt);
return calendar;
}
}
我越來越:
2017-07-01T07:58:23.000Z
2017-JUL-1 9:58:23
2017-6-1 9:58:23
請注意,我的小時數= 9,而預期的是7
問題
謝謝 !
為什么會這樣
由於此行: ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
您將時區強制設置為dateStr
定義的時區 ,因此Calendar將使用您的時區,而不是原始時區。
如何獲得正確的結果?
將您的getFormatedDate
方法更改為:
private Calendar getFormatedDate(final String dateStr) {
final ZonedDateTime zdt = ZonedDateTime.parse(dateStr);
return GregorianCalendar.from(zdt);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.