这个“日期”使用的时间格式是什么:“2014-08-20 00:00:00 -0500”?

3

我尝试按照以下方式转换日期:

SimpleDateFormat fromFormat  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSSZ");

但我得到的是:
 java.text.ParseException: Unparseable date: "2014-09-20 00:00:00 -0500" (at offset 20)
2个回答

4
那个“-0500”是UTC偏移量,以RFC822格式表示。你只需要Z,不要SSSAndroid SimpleDateFormat文档中的表格如下:
符号:Z 含义:时区(RFC 822) 类型:(时区) 示例:Z/ZZ/ZZZ:-0800 ZZZZ:GMT-08:00 ZZZZZ:-08:00
作为一种机器可读格式,我个人也会通常指定一个语言环境,而不是人类可读格式,所以我通常会指定Locale.US
SimpleDateFormat format  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z",
                                                Locale.US);
String text = "2014-08-20 00:00:00 -0500";
System.out.println(format.parse(text));

1
我会尽力为您翻译以下内容,这是关于编程的:

Jon Skeet的回答 是正确的。

标准日期时间格式

以下是一些示例代码,展示如何将字符串转换为符合 ISO 8601标准。

String inputRaw = "2014-08-20 00:00:00 -0500";
String input = inputRaw.replaceFirst( " ", "T" ).replaceFirst( " ", "" ); // Replace first SPACE with a 'T', and delete second SPACE.
// input is "2014-08-20T00:00:00-0500".

Joda-Time

您可以直接将符合要求的字符串传递给Joda-Time中的DateTime构造函数。在Java 8中,相应的java.time包(受Joda-Time启发)也是如此。

DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" ); // Specify it rather than have JVM's default applied.
DateTime dateTimeMontréal = new DateTime( input, timeZone );
DateTime dateTimeUtc = dateTimeMontréal.withZone( DateTimeZone.UTC );

将数据输出到控制台。

System.out.println( "inputRaw: " + inputRaw );
System.out.println( "input: " + input );
System.out.println( "dateTimeMontréal: " + dateTimeMontréal );
System.out.println( "dateTimeUtc: " + dateTimeUtc );

当运行时...
inputRaw: 2014-08-20 00:00:00 -0500
input: 2014-08-20T00:00:00-0500
dateTimeMontréal: 2014-08-20T01:00:00.000-04:00
dateTimeUtc: 2014-08-20T05:00:00.000Z

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接