java - java DateFormat格式方法不将已经分析的日期显示到特定的时区

  显示原文与译文双语对照的内容

I ("yyyy-MM-dd't'hh: mm: ssz"),我将日期字符串转换为日期。解析( DateinString ) 。
这里不是转换到 UTC,而是转换到我的本地时区。 我通过DateFormat的格式方法显示了这个经过分析的日期。

因这里,当试图通过相同的格式方法显示这个解析日期时,我必须将它格式化为 UTC.Now 。 下面是将已经解析日期格式化为UTC的代码


Calendar cal = Calendar.getInstance();


cal.setTimeZone(TimeZone.getTimeZone("UTC"));


cal.setTime(alreadyParsedDateTime);//


System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(cal.getTime())); 



我的样品日期字符串为"2015-12-23:: 00-0800"
在解析 -- alreadyparseddatetime之后,tostring:: 星期四 Dec: 30: 00
:-- System.out. ( 新 SimpleDateFormat ("yyyy-MM-dd't'hh:mm:ss") 。format ( alreadyParsedDateTime ) ): 2015-12-24 t04: 30: 00

:-- System.out. println/") yyyy-MM-dd't'hh:mm:ss 。format ( 。cal 。gettime ( )的解析日期之后( ): 2015-12-24 t04: 30: 00

预计日期格式为:: 2015-12-23 t23: 00: 00

我不知道为什么格式方法不用预期的方式工作或者有任何技巧可以做同样的事情。 请帮我。

时间: 原作者:

这里有两个不同的主题:解析和格式化。

1.解析

SimpleDateFormat.parse() 将尝试从所提供的日期字符串中解析时区。 如果解析的日期字符串不包含显式时区,那么 SimpleDateFormat 对象上的"默认值"时区将被使用。 你可以使用 setTimeZone() 方法设置缺省时区。 请参见 SimpleDateFormat.parse()DateFormat.setTimeZone()的API文档,以便参考。

下面是一个演示如何使用 setTimeZone()的时区集影响解析的示例:


 String dateString ="2015.12.10 13:58:18";



 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");


 sdf1.setTimeZone(TimeZone.getTimeZone("GMT"));


 Date date1 = sdf1.parse(dateString);



 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");


 sdf2.setTimeZone(TimeZone.getTimeZone("EST"));


 Date date2 = sdf2.parse(dateString);



//Shows that the parsing honours time zone -- will print:


//Thu Dec 10 14:58:18 CET 2015 (original date was parsed as GMT)


//Thu Dec 10 19:58:18 CET 2015 (original date was parsed as EST)


 System.out.println(date1);


 System.out.println(date2);



2.格式化

假设日期已经正确解析,那么你的问题就是格式化。 你需要设置用于格式化的实际 SimpleDateFormat 对象的时区。 我修改了你的代码以进行这里操作,现在它将打印你的expet:


 Calendar cal = Calendar.getInstance();


 cal.setTime(alreadyParsedDateTime);


 SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");


 sdf3.setTimeZone(TimeZone.getTimeZone("UTC"));



//Prints: 2015-12-23T23:00:00 for your example date string


 System.out.println(sdf3.format(cal.getTime()));



原作者:
...