将给定日期转换为分钟的问题
Problems in converting a given date to minutes
我有一个函数可以获取日期并将其转换为毫秒,然后将其更改为分钟。最终值始终为正,但由于某些未知原因,从 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 日时
The current date in correct format for milli ==>Sat Jul 04 17:28:41
IST 2020
Milli === > 431054184
The minutes for current date is
==> 7184
当日期是 6 月 4 日时
The current date in correct format for milli ==>Thu Jun 04 17:28:41
IST 2020
Milli === > 2134021480
The minutes for current date
is ==> 35567
当日期是 6 月 17 日时
The current date in correct format for milli ==>Wed Jun 17 17:28:41
IST 2020
Milli === > -1037745816
The minutes for current date
is ==> -17295
当日期是 6 月 22 日时
The current date in correct format for milli ==>Mon Jun 22 17:28:41
IST 2020
Milli === > -605745816
The minutes for current date
is ==> -10095
你应该使用 long,不要转换为 int。
使用:Long milli1 = entrydatecom.getTime();
当您将 long 转换为 int 时,您会丢失大量数据。
一个 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",则毫秒数将为:
1592407721000 ( > 2147483647 ) 装不下
问题
您的 date/time 字符串中的一个主要问题是 2020 年 7 月 4 日是 Sat
,而您写的是 Wed
,因此它要么无法正确解析,要么会导致抛出异常。
除此之外,我建议您使用 modern date/time API 而不是使用损坏的 java.util.Date
和 SimpleDateFormat
。
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
我有一个函数可以获取日期并将其转换为毫秒,然后将其更改为分钟。最终值始终为正,但由于某些未知原因,从 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 日时
The current date in correct format for milli ==>Sat Jul 04 17:28:41 IST 2020
Milli === > 431054184
The minutes for current date is ==> 7184
当日期是 6 月 4 日时
The current date in correct format for milli ==>Thu Jun 04 17:28:41 IST 2020
Milli === > 2134021480
The minutes for current date is ==> 35567
当日期是 6 月 17 日时
The current date in correct format for milli ==>Wed Jun 17 17:28:41 IST 2020
Milli === > -1037745816
The minutes for current date is ==> -17295
当日期是 6 月 22 日时
The current date in correct format for milli ==>Mon Jun 22 17:28:41 IST 2020
Milli === > -605745816
The minutes for current date is ==> -10095
你应该使用 long,不要转换为 int。
使用:Long milli1 = entrydatecom.getTime();
当您将 long 转换为 int 时,您会丢失大量数据。
一个 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",则毫秒数将为: 1592407721000 ( > 2147483647 ) 装不下
问题
您的 date/time 字符串中的一个主要问题是 2020 年 7 月 4 日是 Sat
,而您写的是 Wed
,因此它要么无法正确解析,要么会导致抛出异常。
除此之外,我建议您使用 modern date/time API 而不是使用损坏的 java.util.Date
和 SimpleDateFormat
。
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