【问题标题】:Timezone conversion to "EDT" in JavaJava中的时区转换为“EDT”
【发布时间】:2013-07-01 11:40:03
【问题描述】:

我需要在“EDT”时区获取当前时间。我得到了当前时间并将其格式化为“EDT”,我得到了我想要的时间。但是,当我尝试将其解析为“EDT”时区中的日期时,在解析为日期后,我仍然以“IST”格式获取时间。我不知道我做错了什么。

Date date = new Date(); 

String format = "MM/dd/yyyy hh:mm:ss Z";

DateFormat formatter = new SimpleDateFormat(format);

formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));

String dateString = formatter.format(date);
System.out.println(dateString);

try {       System.out.println(formatter.parse(dateString));
}     

catch (ParseException e) {
    e.printStackTrace();
}

【问题讨论】:

  • EDT 不是时区。它是东部时区的一部分,但一年中的大部分时间都没有生效。男人的问题是你仍然打印出Date.toString,它总是使用系统默认时区。 Date没有时区
  • 日历实例 = Calendar.getInstance(TimeZone.getTimeZone("America/New_York")); System.out.println(instance.getTimeZone()); System.out.println(instance.getTime()); 输出: 东部标准时间 Mon Jul 01 18:02:10 IST 2013
  • 推测“东部标准时间”是TimeZone.toString() 的结果。我之前的评论解释了 IST 部分。

标签: java parsing timezone


【解决方案1】:

java.util.Date 和 .Calendar 类是出了名的麻烦。避开他们。而是使用 Joda-Time 或 Java 8 中的 java.time 包(受 Joda-Time 启发)。

与 java.util.Date 不同,Joda-Time 中的 DateTime 知道自己分配的时区。如果指定时区失败,则会分配JVM的默认时区。

您可以根据需要与 java.util.Date 对象相互转换,以便与其他类一起使用。

java.util.Date date = new Date();

DateTimeZone timeZone = DateTimeZone.forID( "America/New_York" );
DateTime dateTimeNewYork = new DateTime( date, timeZone );
DateTime dateTimeIndia = dateTimeNewYork.withZone( DateTimeZone.forID( "Asia/Kolkata" ) );
DateTime dateTimeUtc = dateTimeNewYork.withZone( DateTimeZone.UTC );

对这些 DateTime 对象调用 toString 方法,以查看它们自己的时区,该时区用于使用合理的 ISO 8601 标准格式生成字符串。您也可以在 Joda-Time 上使用其他格式。

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 2022-06-27
    • 2010-11-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多