我有一个函数,我获取日期并将其转换为毫秒,然后我将其改为分钟。 最终值总是正的,但是由于一些未知的原因,从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);
当日期是七月四日时
milli==>Sat Jul 04 17:28:41 IST 2020
milli===>当前日期的正确格式; 431054184
当前日期的分钟数为==>; 7184
当日期是六月四日时
milli==>Thu Jun 04 17:28:41 IST 2020
milli===>>当前日期的正确格式; 2134021480
当前日期的分钟数为==>; 35567
当日期是六月十七日的时候
milli==>Wed Jun 17 17:28:41 IST 2020
milli===>的当前日期的正确格式为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
您应该使用long,而不是强制转换为int。
使用:long milli1=EntryDateCom.GetTime();
当您将long转换为int时,会丢失大量数据。 整数可以支持-2147483648和2147483647之间的数字长数字可以支持-9,223,372,036,854,775,808和9,223,372,036,854,775,807之间的数字
例如,如果您正在测试“Wed Jun 17 17:28:41 IST 2020”,ms的编号将是:1592407721000(>2147483647),它无法容纳
日期/时间字符串中的一个主要问题是2020年7月4日是sat
,而您编写的是wed
,因此可能无法正确解析或引发异常。
除此之外,我建议您使用现代日期/时间API,而不是使用破坏的java.util.date
和SimpleDateFormater
。
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
class Main {
public static void main(String[] args) {
// Define format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss zzz yyyy");
// Parse to ZonedDateTime
ZonedDateTime zdt = LocalDateTime.parse("Sat Jul 4 17:28:41 IST 2020", formatter)
.atZone(ZoneId.of("Asia/Kolkata"));
// Calculate duration in minute
long minutes = ZonedDateTime.now(ZoneId.of("Asia/Kolkata")).until(zdt, ChronoUnit.MINUTES);
// Display
System.out.println(minutes);
}
}
输出:
24333