【问题标题】: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
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 变量来存储秒数。