如何将时间戳从yyyy-MM-ddThh:mm:ss:SSSZ格式转换为MM/dd/yyyy hh:mm:ss.SSS格式?从ISO8601到UTC

use*_*966 26 java datetime

我想将时间戳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 );
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 31

首先,您需要注意UTC不是一种格式,它是一个有效的时区.因此,"从ISO8601转换为UTC"作为一个概念并不真正有意义.

但是,这是一个使用Joda Time的示例程序,它将文本解析为a 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @KevinZhao:'T'只是将时间与日期分开的方式; 'Z'是指示UTC为时区的方式 - "祖鲁时间". (2认同)

use*_*966 30

是.你可以像这样使用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));
Run Code Online (Sandbox Code Playgroud)

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

  • 抬头,小写`hh`是12小时格式,'HH`是24小时 (2认同)