【问题标题】:Current Time In Java(Logic Error) Time Zone: US Eastern TimeJava 中的当前时间(逻辑错误)时区:美国东部时间
【发布时间】:2016-04-01 18:43:03
【问题描述】:

我的代码中似乎存在逻辑错误。现在时间是:14:38,但是 我的代码是 18:38。我知道有一个日历类我可以使用,但我想 知道为什么这段代码是错误的。

代码如下:

public class welcome{
  public static void main(String args[]){
    //get total milliseconds since 1970
    long total_millisec = System.currentTimeMillis();

    // compute total seconds since 1970
    long total_sec = total_millisec / 1000;

    //compute current second
    long current_sec = total_sec % 60;

    //compute total minutes since epoch
    long total_mins =  total_sec / 60;

    //compute current minute
    long current_min = total_mins % 60;

    //compute total hours
    long total_hours = total_mins / 60;

    //compute current hour
    long current_hour = total_hours % 24;

    System.out.println("Time is: "+current_hour+":"+current_min+":"
    +current_sec);

    }

 }

【问题讨论】:

  • 你在哪个时区? System.currentTimeMillis() 返回自 1.1.1970 UTC 以来的毫秒数。
  • 我在美国。东部时间
  • 不错!所以需要做更多的计算才能把它送到 ET
  • 正如 f1sh 已经评论的那样,System.currentTimeMillis() 为您提供了一个相对于UTC 的值偏移量(EST 是 UTC-5,EDT 是 UTC-4)。
  • 请注意此处日期格式化程序中 Java 语言环境的使用:stackoverflow.com/questions/4594519/… 您的语言环境用于告诉其他 Java 代码您在 EST 中。

标签: java time


【解决方案1】:

当您执行计算时,假定 System.currentTimeMillis() 返回 1970 年 1 月 1 日午夜(即 1970-01-01 00:00)与当前时间之间的毫秒数差异。尝试评估系统中的基准日期,看看它会是什么:

System.out.println("" + new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm").format(new java.util.Date(0)));

它可能会返回类似 1969-12-31 19:00 的信息,而这不是午夜。

System.currentTimeMillis() 返回与表达式相同:

long currentTime = new java.util.Date().getTime() - new java.util.Date(0).getTime();

【讨论】:

    猜你喜欢
    • 2022-06-29
    • 1970-01-01
    • 2015-09-24
    • 2018-09-07
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多