Java:将MST转换为EST



我一直在尝试转换从epoch到今天的时间,并以东部标准时间显示。以下是远程机器上的输出(它是远程托管的):

Date now = new Date(System.currentTimeMillis());
System.out.println(now.toString());
// Thu Apr 24 14:36:11 MST 2014

不知道MST是什么,但我想在EST中获得自epoch以来的当前毫秒数,并在EST中显示结果。

无论我做什么,我都无法节省工作时间(目前是美国东部时间区的daylights savings Time);我要么在太平洋标准时间、格林尼治标准时间或UTC结束,当我得到"EST"时,它要么是一些随机值,要么落后1小时或3小时。

我希望输出使用以下DateFormat:进行格式化

DateFormat EXPIRE_FORMAT = new SimpleDateFormat("MMM dd, yyyy h:mm a z");

只需使用DateFormat#setTimeZone(TimeZone) 设置要显示时间的时区

Date now = new Date(System.currentTimeMillis());
DateFormat EXPIRE_FORMAT = new SimpleDateFormat("MMM dd, yyyy h:mm a z");
EXPIRE_FORMAT.setTimeZone(TimeZone.getTimeZone("America/Montreal")); // or whatever relevant TimeZone id 
System.out.println(EXPIRE_FORMAT.format(now));

AFAIK,目前没有EST。这都是美国东部时间的春天。

上面打印

Apr 24, 2014 5:53 PM EDT

Sotirios Delimanolis的评论和回答是正确的。

避免使用3或4个字母的时区代码

您应该避免使用3或4个字母的时区代码,因为它们既不是标准化的,也不是唯一的。而是使用适当的时区名称,通常是大陆+城市

避开j.u.Date

java.util.Date和.Calendar&与Java捆绑在一起的SimpleDateFormat类是出了名的麻烦。使用一个不错的日期时间库和一个更新的时区数据库。对于Java来说,这意味着要么是Joda Time,要么是Java 8中新的Java.Time包(灵感来自Joda Time)。

避免Epoch以来的毫秒数

我建议您避免使用自epoch以来的毫秒。由于数字在被人类读取时毫无意义,因此很快就会变得令人困惑。让日期时间库为您管理毫秒。

指定时区

通常最好指定所需/预期的时区。如果省略时区,所有主要的日期时间库(java.util.date、JodaTime、java.time)都会应用JVM的默认时区。

Joda时间示例

Joda Time 2.3中的示例代码。

DateTimeZone timeZoneToronto = DateTimeZone.forID( "America/Toronto" );
DateTime dateTimeToronto = new DateTime( timeZoneToronto ); // Current moment.
DateTime dateTimeUTC = dateTimeToronto.withZone( DateTimeZone.UTC );
DateTime dateTimeParis = dateTimeToronto.withZone( DateTimeZone.forID( "Europe/Paris" ) );

如果您真的想要自epoch以来的毫秒数,请调用getMillis方法。在上面的示例代码中,所有三个DateTime对象自epoch以来都具有相同的毫秒数。

long millis = dateTimeToronto.getMillis();

如果您需要与其他类一起使用的java.util.Date…

java.util.Date date = dateTimeToronto.toDate();

虽然Joda Time使用ISO 8601标准格式作为默认格式,但您可以指定其他格式来生成字符串。

DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMM dd, yyyy h:mm a z" );
String output = formatter.print( dateTimeToronto );

相关内容

  • 没有找到相关文章

最新更新