Java:将MST转换为EST
我一直在尝试转换时间,从大纪元到今天,并显示在东部标准时间。以下是远程机器上的输出(远程托管): 不知道MST是什么,但我想在EST中获取自epoch以来的当前毫秒数,并在EST中显示结果 无论我做什么,我都无法让daylights节省的时间投入工作(目前daylights节省的时间在EST时区);我要么以PST、GMT或UTC结束,当我得到“EST”时,要么是随机值,要么是落后1小时,要么是落后3小时 我希望使用以下日期格式格式化输出:Java:将MST转换为EST,java,datetime,timezone,date-format,Java,Datetime,Timezone,Date Format,我一直在尝试转换时间,从大纪元到今天,并显示在东部标准时间。以下是远程机器上的输出(远程托管): 不知道MST是什么,但我想在EST中获取自epoch以来的当前毫秒数,并在EST中显示结果 无论我做什么,我都无法让daylights节省的时间投入工作(目前daylights节省的时间在EST时区);我要么以PST、GMT或UTC结束,当我得到“EST”时,要么是随机值,要么是落后1小时,要么是落后3小时 我希望使用以下日期格式格式化输出: DateFormat EXPIRE_FORMAT = n
DateFormat EXPIRE_FORMAT = new SimpleDateFormat("MMM dd, yyyy h:mm a z");
只需设置您希望在使用中显示时间的时区 阿福 上面的照片
Apr 24, 2014 5:53 PM EDT
评论和建议都是正确的
避免使用3个或4个字母的时区代码
你应该避免使用3或4个字母的时区代码,因为它们既不是标准的,也不是唯一的。而是使用,通常是一个大陆+城市
避免j.u.Date
与java捆绑在一起的java.util.Date和.Calendar&SimpleDataFormat类是出了名的麻烦。使用合适的日期时间库和更新的时区数据库。对于Java,这意味着Java 8中的新Java.time包(受Joda time的启发)或其中之一
避免从新纪元开始的毫秒
我建议您避免使用毫秒,因为。很快就会让人困惑,因为当被人读取时,数字是毫无意义的。让日期时间库为您管理毫秒
指定时区
通常最好指定所需/预期时区。如果省略时区,所有主要的日期时间库(java.util.date、Joda-time、java.time)都会应用JVM的默认时区
乔达时间示例
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开始的毫秒数,请调用该方法。在上面的示例代码中,所有三个DateTime对象自epoch以来的毫秒数相同
long millis = dateTimeToronto.getMillis();
如果您需要一个java.util.Date用于其他类
java.util.Date date = dateTimeToronto.toDate();
虽然Joda Time使用标准格式作为默认格式,但您可以指定其他格式来生成字符串
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMM dd, yyyy h:mm a z" );
String output = formatter.print( dateTimeToronto );
你现在的地理位置在哪里?另外,
SimpleDateFormat
有一个setTimeZone
方法。我来自澳大利亚墨尔本,有东部标准时间(EST)。三个字母的代码不是唯一的。从技术上讲,目前EST不适用,而是EDT(东部夏时制)。您可能只是指“东部时间”(标准时间或日光时间取决于适用的时间)。您只需应用时区。您可以使用“美国/纽约”
,或者如果您愿意,“美国/多伦多”
或“美国/蒙特利尔”
@PeterLawrey-这就是为什么“美国/开曼群岛”
有一个独特的区域。他非常擅长了解这些事情。:)另请参见和。@PeterLawrey-另外,感谢您用缩写提到这个问题。是高度模糊和重叠的,但有些人似乎认为它们是独一无二的钥匙请避免向后兼容区域,如“美国/东部”
。示例应首选规范区域,如“美国/纽约”
。谢谢。@MattJohnson我来自蒙特利尔:)。你能解释一下为什么这些是有问题的吗?啊,一个解释。是的,链接中的原因是有效的。特别是,TZDB将向后兼容链接移动到。US/*
分区最初是为了与POSIX标准保持一致而创建的。此外,在过去的历史中,纽约、蒙特利尔和多伦多之间也有一些细微的差异。把它们全部归为“东方”并不十分准确。
java.util.Date date = dateTimeToronto.toDate();
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMM dd, yyyy h:mm a z" );
String output = formatter.print( dateTimeToronto );