簡體   English   中英

將字符串時間戳轉換為符合ISO 8601的字符串

[英]convert string timestamp to ISO 8601 compliant string

我有一個時間戳和字符串格式的偏移量,如下所示,在兩個不同的變量中:

01/14/2016 07:37:36PM
-08:00

我想將上述時間戳轉換為ISO 8601 compliant String, with milliseconds and timezone因此轉換后應如下所示:

2016-01-14T19:37:36-08:00

我怎樣才能做到這一點? 我正在使用jodatime庫。

較新的java.time類可與ISO 8601字符串配合使用。

    String dateTimeString = "01/14/2016 07:37:36PM"; 
    String offsetString = "-08:00";

    LocalDateTime dateTime = LocalDateTime.parse(dateTimeString,
            DateTimeFormatter.ofPattern("MM/dd/uuuu hh:mm:ssa"));
    ZoneOffset offset = ZoneOffset.of(offsetString);
    String formattedTimestamp = dateTime.atOffset(offset).toString();
    System.out.println(formattedTimestamp);

此打印

2016-01-14T19:37:36-08:00

遠離過時的類,例如SimpleDateFormat

什么是offsetString不存在? 我了解在這種情況下,您希望UTC的偏移量為Z 例如這樣:

    ZoneOffset offset;
    if (offsetString == null) {
        offset = ZoneOffset.UTC;
    } else {
        offset = ZoneOffset.of(offsetString);
    }
    String formattedTimestamp = dateTime.atOffset(offset).toString();

使用null offsetString我們現在得到

2016-01-14T19:37:36Z

JSR-310中描述了java.time的類(我正在使用其中的一些),這些類是Java 8內置的。如果您想在Java 6或7中使用它們,該怎么辦? 您將獲得ThreeTen Backport(下面的鏈接)。 它為您提供了Java 6和7的大多數類。我不太高興告訴您您需要一個外部庫,但是在這種情況下,只有在您移至Java 8之前,我希望您很快。

我確信它也可以用JodaTime完成,但是我沒有經驗,因此無法在此提供詳細信息。 我所知道的是,我已經閱讀過JodaTime背后的人們,現在建議您改為使用java.time 因此,我想請您將一個外部庫換成一個新的(據稱更好的)庫。 就其本身而言,我並不為此感到不滿。 僅當您已經具有使用JodaTime的代碼庫時,它才是真正的瑣事。

鏈接: ThreeTen Backport

您可以在以下示例部分中找到更多示例: -http : //docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String string2 = "2001-07-04T12:08:56.235-07:00";
Date result2 = df2.parse(string2);

暫無
暫無

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

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