【发布时间】:2020-06-17 13:50:55
【问题描述】:
我有一个函数,我可以获取日期并将其转换为毫秒,然后将其更改为分钟。最终值始终为正值,但由于某些未知原因,从 6 月 5 日到 6 月 29 日,结果值变为负值。因此,我期望正值的后续操作会受到影响。这个问题的根本原因是什么?我附上了我的一段代码,其中包含不同日期的不同结果快照。任何人都可以建议解决此问题的方法吗?我正在使用 java 版本“1.8.0_161”
String democurrentDate = "Wed Jul 4 17:28:41 IST 2020";
Date entrydatecom = new Date();
entrydatecom = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(democurrentDate);
System.out.println("The current date in correct format for milli ==>" + entrydatecom);
int milli1 = (int) entrydatecom.getTime();
System.out.println("Milli === > " + milli1);
long minutesforcurr = TimeUnit.MILLISECONDS.toMinutes(milli1);
System.out.println("The minutes for current date is ==> " + minutesforcurr);
当日期是 7 月 4 日时
milli 格式正确的当前日期 ==>Sat Jul 04 17:28:41 IST 2020
Milli === > 431054184
当前日期的分钟数是 ==> 7184
当日期是 6 月 4 日时
milli 格式正确的当前日期 ==>Thu Jun 04 17:28:41 IST 2020
Milli === > 2134021480
当前日期的分钟数 是 ==> 35567
当日期是 6 月 17 日时
milli 格式正确的当前日期 ==>Wed Jun 17 17:28:41 IST 2020
Milli === > -1037745816
当前日期的分钟数 是 ==> -17295
当日期是 6 月 22 日时
milli 格式正确的当前日期 ==>Mon Jun 22 17:28:41 IST 2020
Milli === > -605745816
当前日期的分钟数 是 ==> -10095
【问题讨论】:
-
请澄清“将其转换为毫秒”的含义。转换成什么样的毫秒?自 Unix 纪元以来的毫秒数?自其他纪元以来的毫秒数?目前您正在将
long转换为int,因此您几乎肯定会在那里丢失信息,这解释了为什么您会得到负值。但是,如果不知道您期望结果是什么以及为什么,我们就无法真正帮助您。 -
除了强制转换为
long的int之外,您是来自java.util的过时日期时间类...使用java.time代替它们。 -
我建议你不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用ZonedDateTime、DateTimeFormatter、ZoneId、Instant和Duration,均来自java.time, the modern Java date and time API。
标签: java date datetime java-8 datetime-format