【问题标题】:Unix TimeStamp value gets CorruptedUnix TimeStamp 值损坏
【发布时间】:2021-02-26 11:33:35
【问题描述】:

我正在尝试使用以下 sn-p 获取 Unix 时间戳值,但有时该值会损坏,例如 11030 或 810 之类的随机数,我们没有得到实际日期

public static int getUnixTimeStamp() {

  Date date = new Date();

  return (int) (date.getTime() / 1000);

}

【问题讨论】:

  • 很奇怪。看你的代码我无法解释。我也无法在我的桌面 Java 上重现。最好使用long 而不是int 来避免the Year 2038 problem

标签: java android unix unix-timestamp


【解决方案1】:

java.time

我不能告诉你它是否能缓解你的问题。在你坚持有 2038 年的问题时,我更愿意这样写方法:

public static int getUnixTimeStamp() {
    Instant now = Instant.now();
    return Math.toIntExact(now.getEpochSecond());
}

该方法刚刚返回 1 614 441 874。我正在使用 java.time,这是现代 Java 日期和时间 API,它坚如磐石,所以我应该说你有机会。该代码的其他优点是(1)没有从毫秒到秒的转换(2)在 2038 年代码将停止工作,而不是开始给出令人惊讶的错误结果。

链接:Year 2038 problem

【讨论】:

    【解决方案2】:

    与其自己执行计算,不如让 Java 为您完成。

    import java.util.Date;
    import java.util.concurrent.TimeUnit;
    
    public class Main {
        public static void main(String[] args) {
            long millis = new Date().getTime();
            System.out.println(millis);
            long seconds = TimeUnit.SECONDS.convert(millis, TimeUnit.MILLISECONDS);
            System.out.println(seconds);
        }
    }
    

    输出:

    1614443708365
    1614443708
    

    我还建议您使用long 而不是int 变量来存储秒数。

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 2015-08-18
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      相关资源
      最近更新 更多