【问题标题】:Current Date and time ("Wall" Date and time) for any timezone任何时区的当前日期和时间(“Wall”日期和时间)
【发布时间】:2012-09-19 16:08:02
【问题描述】:

好的,我知道这个问题已经在很多地方被问过很多次了,但是我还不能解决这个问题。我尝试了java.util.DateJodaTime API。

我的问题是关于如何在考虑我的应用程序运行的时区的情况下返回当前日期和时间。这是我写的返回当前日期时间的方法。问题是,它总是返回 UTC 时间。

private String getCurrentDate()
{
    DateTime currentDate = new DateTime(DateTimeZone.getDefault());
    SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM hh:mm");
    String dateNow = formatter.format(currentDate);
    return dateNow;
}

感谢您帮助我!

【问题讨论】:

    标签: java datetime timezone jodatime


    【解决方案1】:
    private String getCurrentDate()
    {
          final DateFormat format = DateFormat.getDateTimeInstance();
          format.setTimeZone(Calendar.getInstance().getTimeZone());
          return format.format(new Date());
    }
    

    这应该可以完成工作。获取真正的本地时区的棘手部分。但是 Java 的 Calendar 类很好地完成了这个技巧。

    如果您愿意,您也可以使用 SimpleDateFormat 作为DateFormat

    【讨论】:

    • TimeZone.getDefault() 将返回程序运行的时区。例如。 format.setTimeZone(TimeZone.getDefault()).
    • 没有。那是错误的。 TimeZone.getDefault() 在 Java 的某些实现中返回本地时区,但例如 Linux 下的 OpenJDK 6 报告总是返回 GMT 时区,无论实际时区如何。
    【解决方案2】:

    DateFormat(和SimpleDateFormat)默认为 JVM 的时区,应该是您计算机的时区。

    DateFormat format = new SimpleDateFormat("dd-MMM hh:mm");
    System.out.println(format.format(new Date()));
    

    以当地时区打印。您始终可以通过调用setTimeZone 来明确设置DateFormat 的时区。

    format.setTimeZone(TimeZone.getTimeZone("PDT"));
    

    【讨论】:

    • 令我不适的是,即使这对我也不起作用。实际上,所提供的解决方案都不起作用。有趣的是,即使是 Eclipse 也一直在向我显示我从这些代码中获得的相同日期/时间。 (当我键入此内容时,我的桌面显示为晚上 10:35(正确的当地时间),而我得到的是下午 5:05)。我错过了一些太琐碎的事情吗?
    • 在 getTimeZone() 中明确指定时区后,我得到了正确的结果。 TimeZone.getDefault() 不应该返回我的本地时区吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多