簡體   English   中英

Java 8中的日期格式化程序

[英]Date formatter in java 8

我有一個必須存儲時區的不同日期和時間的要求。 我已經使用了Java 8的ZonedDateTime。

ZoneId zoneId = ZoneId.of("US/Eastern");
ZonedDateTime zt = ZonedDateTime.now(zoneId);

System.out.println(zt.toString());

我的問題是我想以java.util.Date格式存儲它。 我用了DateTimeFormatter

 DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
dtf.format(zt);

直到這里工作正常,當我嘗試使用簡單的日期格式將其轉換為java.util.Date時,這給了我所需的字符串格式日期

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
System.out.println(sdf.parse(dtf.format(zt)));

我在IST 2016年3月12日星期六00:44:10獲得輸出,但我希望在java.util.Date類型中輸出為2016-03-11T14:14:10-05:00。 有人可以建議我要去哪里錯嗎?

您使用了錯誤的方式,這是正確的代碼

sdf.format(sdf.parse(val))這樣正確的方法。

    ZoneId zoneId = ZoneId.of("US/Eastern");
    ZonedDateTime zt = ZonedDateTime.now(zoneId);

    System.out.println(zt.toString());
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
    String val = dtf.format(zt);
    System.out.println(val);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    //String dateStr = zt.format(sdf);
    System.out.println(sdf.format(sdf.parse(val)));

ZonedDateTime>即時>日期

最好避免使用舊的日期時間類,包括java.util.Date。 但是,如果必須,您可以進行轉換。 在舊的java.util.Date類上調用from方法。

為此,您需要在UTC的時間軸上Instant一下。

Instant instant = myZonedDateTime.toInstant();
java.util.Date juDate = java.util.Date.from( instant );

要走另一個方向:

Instant instant = juDate.toInstant();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM