簡體   English   中英

如何將時間戳從yyyy-MM-ddThh:mm:ss:SSSZ格式轉換為MM / dd / yyyy hh:mm:ss.SSS格式?從ISO8601到UTC

[英]How can I convert a timestamp from yyyy-MM-ddThh:mm:ss:SSSZ format to MM/dd/yyyy hh:mm:ss.SSS format? From ISO8601 to UTC

我想將時間戳2011-03-10T11:54:30.207Z轉換為10/03/2011 11:54:30.207。 我怎樣才能做到這一點? 我想將ISO8601格式轉換為UTC,然后UTC應該是位置感知的。 請幫忙

String str_date="2011-03-10T11:54:30.207Z";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
date = (Date)formatter.parse(str_date);
System.out.println("output: " +date );

例外:java.text.ParseException:Unparseable date:“2011-03-10T11:54:30.207Z”

首先,您需要注意UTC不是一種格式,它是一個有效的時區。 因此,“從ISO8601轉換為UTC”作為一個概念並不真正有意義。

但是,這是一個使用Joda Time的示例程序,它將文本解析為DateTime ,然后對其進行格式化。 我已經猜到你可能想要使用的一種格式 - 你還沒有真正提供足夠的信息來說明你想要做什么來說明更多。 您可能還想考慮時區...是否要在指定時刻顯示當地時間 如果是這樣,您需要計算用戶的時區並進行適當的轉換。

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String text = "2011-03-10T11:54:30.207Z";
        DateTimeFormatter parser = ISODateTimeFormat.dateTime();
        DateTime dt = parser.parseDateTime(text);

        DateTimeFormatter formatter = DateTimeFormat.mediumDateTime();
        System.out.println(formatter.print(dt));
    }
}

是。 你可以像這樣使用SimpleDateFormat。

SimpleDateFormat formatter, FORMATTER;
formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String oldDate = "2011-03-10T11:54:30.207Z";
Date date = formatter.parse(oldDate.substring(0, 24));
FORMATTER = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS");
System.out.println("OldDate-->"+oldDate);
System.out.println("NewDate-->"+FORMATTER.format(date));

輸出OldDate - > 2011-03-10T11:54:30.207Z NewDate - > 10-Mar-2011 11:54:30.207

希望這可以幫助:

public String getSystemTimeInBelowFormat() {
    String timestamp = new SimpleDateFormat("yyyy-mm-dd 'T' HH:MM:SS.mmm-HH:SS").format(new Date());
    return timestamp;
}

Date對象中輸入原始日期,然后使用DateFormat打印出結果。 如果自動解析方法不接受您的格式,則可能必須將字符串拆分為較小的片段以創建初始Date對象。

偽代碼:

Date inputDate = convertYourInputIntoADateInWhateverWayYouPrefer(inputString);
DateFormat outputFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss.SSS");
String outputString = outputFormat.format(inputDate);

您可能希望查看joda時間 ,這比java本機日期工具更容易使用,並提供了許多預先構建的常見日期模式。

回應評論,更多細節:

要使用Joda時間執行此操作,您需要兩個DateTimeFormatters - 一個用於輸入格式來解析輸入,另一個用於輸出格式以打印輸出。 您的輸入格式是ISO標准格式,因此Joda time的ISODateTimeFormat類已經有一個帶有解析器的靜態方法: dateHourMinuteSecondMillis 您的輸出格式不是他們預先構建的格式化程序,因此您必須自己使用DateTimeFormat 我想DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS"); 應該做的伎倆。 獲得兩個格式化程序后,在輸入格式上調用parseDateTime()方法,在輸出格式上調用print方法,以字符串形式獲取結果。

把它放在一起應該看起來像這樣(警告,未經測試):

DateTimeFormatter input = ISODateTimeFormat.dateHourMinuteSecondMillis();
DateTimeFormatter output = DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS");
String outputFormat = output.print( input.parseDate(inputFormat) );

使用DateFormat (對不起,但問題簡潔並不能保證更長或更詳細的答案。)

暫無
暫無

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

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