Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:将MST转换为EST_Java_Datetime_Timezone_Date Format - Fatal编程技术网

Java:将MST转换为EST

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

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

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

无论我做什么,我都无法让daylights节省的时间投入工作(目前daylights节省的时间在EST时区);我要么以PST、GMT或UTC结束,当我得到“EST”时,要么是随机值,要么是落后1小时,要么是落后3小时

我希望使用以下日期格式格式化输出:

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 );