我有dates
的列表。例如:
Tue Oct 21 17:05:37 EDT 2014
Tue Oct 22 18:05:37 IST 2014
Tue Oct 23 19:05:37 EST 2014
由于所有日期都在不同的时区,我想将所有日期转换为GMT
区域,然后将所有日期转换为yyyy-MM-dd'T'HH:mm:ss
格式。即,像这样2014-10-21T17:05:37
。
我该怎么做?
由于
答案 0 :(得分:2)
您可以执行以下操作:
在String变量中定义日期,如下所示:
String date1 = "Tue Oct 21 17:05:37 EDT 2014";
String date2 = "Wed Oct 22 18:05:37 IST 2014";
String date3 = "Thu Oct 23 19:05:37 EST 2014";
创建日期所在的当前格式的表示形式:
SimpleDateFormat currentSDF = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
SimpleDateFormat wantedSDF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
最后解析并格式化日期:
System.out.println(wantedSDF.format(currentSDF.parse(date1)));
System.out.println(wantedSDF.format(currentSDF.parse(date2)));
System.out.println(wantedSDF.format(currentSDF.parse(date3)));
您可以查看SimpleDateFormat
的所有可用符号答案 1 :(得分:2)
使用现代的 java.time 类,而不要使用其他Answer中常见的麻烦的旧类。具体来说,是ZonedDateTime
类。
顺便说一下,那些输入字符串格式很糟糕。尤其是EDT
,IST
等的使用。这些不是真实的时区。 These是实时区域名称。这些伪区域不是标准化的,甚至不是唯一的!因此,ZonedDateTime
类将猜测您的意思,但结果可能与您预期的不同。例如,IST
是爱尔兰标准时间还是印度标准时间?
相反,在将日期时间值作为文本交换时,仅使用标准的ISO 8601格式。
我修复了您的错误输入字符串(星期二= 21、22和23?)。
List < String > inputs = List.of(
"Tue Oct 21 17:05:37 EDT 2014" ,
"Wed Oct 22 18:05:37 IST 2014" ,
"Thu Oct 23 19:05:37 EST 2014"
);
定义一种格式设置以匹配您的输入。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" ).withLocale( Locale.US );
环绕输入,尝试解析每个输入。同样,不能保证您的伪时区会猜到正确的时区。
for ( String input : inputs )
{
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
System.out.println( "zdt.toString() = " + zdt );
}
运行时。
zdt.toString()= 2014-10-21T17:05:37-04:00 [美国/纽约]
zdt.toString()= 2014-10-22T18:05:37Z [大西洋/雷克雅未克]
zdt.toString()= 2014-10-23T19:05:37-04:00 [美国/纽约]
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
要了解更多信息,请参阅Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规范为JSR 310。
Joda-Time项目(现在位于maintenance mode中)建议迁移到java.time类。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容打下了基础。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。