【问题标题】:Compute the unix timestamp for the previous midnight计算前一个午夜的 unix 时间戳
【发布时间】:2013-05-13 06:10:01
【问题描述】:

在 Java 中,如何计算截断到午夜的 unix 时间戳?

PHP examples 显示创建字符串然后解析它们。在 Java 中肯定有比这更干净的方法吗?

【问题讨论】:

  • 午夜在哪个时区?你可以使用 Joda Time 吗?
  • @JonSkeet UTC,是的,我可以使用 Joda Time,尽管我还没有在其他任何地方使用它
  • 如果您正在做大量的日期/时间工作,我会彻底推荐使用 Joda Time :)
  • 请注意,对于 Java 8,您有一个新的日期+时间 API,这使得这更容易做到。

标签: java datetime


【解决方案1】:

Unix 时间戳从 UTC 午夜开始,因此我们可以执行以下操作

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long unixTimeStamp = c.getTimeInMillis() / 1000;

【讨论】:

    【解决方案2】:
    Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    c.set(Calendar.HOUR,0);
    c.set(Calendar.MINUTE,0);
    c.set(Calendar.SECOND,0);
    c.set(Calendar.MILLISECOND,0);
    
    long midnightUnixTimestamp = c.getTime().getTime()/1000;
    

    【讨论】:

      【解决方案3】:

      对于 unix 时间戳,您可以创建如下函数:

      public long getMidnightTimestamp(long timestamp)
      {
          return timestamp - timestamp % 86400; // 24 * 60 * 60 sec in one day 
      }
      

      并像这样使用它:

      long currentTimestamp =  System.currentTimeMillis() / 1000;
      long todayMidnightTimestamp = getMidnightTimestamp(currentTimestamp);
      

      【讨论】:

      • 闰秒?我认为这会有点不精确。自 1970 年以来已经有 27 个。(好吧,算了吧。unix 时间不做闰秒。这使得 unix 时间有点不精确,但你的技巧会 100% 奏效)
      • 聪明!无需依赖 Calendar/Date/SimpleDateFormat 的简洁解决方法
      猜你喜欢
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多