3

我正在尝试在SimpleDateFormat的帮助下将时区设置为不同国家的时区。SimpleDateFormat.format()返回给定时区的正确当前时间,但SimpleDateFormat.parse()返回本地当前时间,我不知道为什么会这样。这是我的代码 -

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
System.out.println("Time1 : " + dateFormat.format(new Date()));
System.out.println("Time2 : " + dateFormat.parse(dateFormat.format(new Date())));

输出是 -

Time1 : 2013-01-17 21:01:55
Time2 : Fri Jan 18 10:30:55 IST 2013

Time1 是 "America/Los_Angeles" 的输出, Time2 是 local(ie "Asia/Calcutta") 的输出

我只想要 UTC 秒格式的给定时区的当前时间(即自 1970 年 1 月 1 日以来的秒数)。

为什么 SimpleDateFormat.format() 和 SimpleDateFormat.parse() 只设置一个时区却给出不同的时间?

请帮我。

4

5 回答 5

7

使用Parse,您可以命令编译器以特定格式理解给定的日期。它可以理解并保持自己的格式,并准备好提供您想要的任何格式!

您将得到一个输出,这是您输入日期已成功解析的信号。您无法控制变量存储的日期格式。

使用格式,您可以将日期转换为任何所需的格式。

只需解析 -> 阅读(我可以以任何方式阅读并以我想要的任何方式存储)格式 -> 写入(我会以你想要的格式给你)

于 2013-01-18T05:48:35.983 回答
3

dateFormat.format() 将为您提供给定格式的输出,并将时区更改为格式化程序中设置的时区。(例如 dateFormat.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));)

而 dateFormat.parse() 假设日期已经在提到的时区中,它会将日期转换为您当地的时区。

于 2018-08-08T15:12:00.813 回答
0

dateFormat.parse() 在第二个 println

System.out.println("Time2 : " + dateFormat.parse(dateFormat.format(new Date())));

返回 Date 并且 Date.toString() 以格式返回日期的字符串表示EEE MMM dd HH:mm:ss zzz yyyy形式。请参阅 Date.toString() API

于 2013-01-18T05:54:08.770 回答
0

使用第一行,您将本地日期格式化为特定时区。它将返回一个字符串,该字符串表示在特定时区传递的参数日期。但解析函数不同。它将返回一个日期对象,表示自一月以来的毫秒数世界标准时间 1970 年 1 月 1 日凌晨 12:00。它不包含任何时区信息。

于 2013-01-18T05:57:49.740 回答
0
于 2018-08-08T20:47:19.047 回答