提问者:小点点

将给定日期转换为分钟时的问题


我有一个函数,我获取日期并将其转换为毫秒,然后我将其改为分钟。 最终值总是正的,但是由于一些未知的原因,从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


共3个答案

匿名用户

您应该使用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.dateSimpleDateFormater

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