Java:Unix时间(秒到毫秒)

Java:Unix时间(秒到毫秒),java,calendar,unix-timestamp,java-calendar,Java,Calendar,Unix Timestamp,Java Calendar,我从一个json文件中得到一个10位数的时间戳,我刚刚发现这是Unix时间,单位是秒,而不是毫秒 所以我去了我的DateUtils类,将时间戳(秒)乘以1000,以便将其转换为时间戳(毫秒) 当我尝试测试isToday()时,这行代码给了我大约50000年的时间 int otherYear = this.calendar.get(Calendar.YEAR); 这里出了什么错 DateUtils.java public class DateUtils{ public class DateU

我从一个json文件中得到一个10位数的时间戳,我刚刚发现这是Unix时间,单位是秒,而不是毫秒

所以我去了我的DateUtils类,将时间戳(秒)乘以1000,以便将其转换为时间戳(毫秒)

当我尝试测试isToday()时,这行代码给了我大约50000年的时间

int otherYear = this.calendar.get(Calendar.YEAR);
这里出了什么错

DateUtils.java

public class DateUtils{

 public class DateUtils {
    private Calendar calendar;

    public DateUtils(long timeSeconds){
        long timeMilli = timeSeconds * 1000;
        this.calendar = Calendar.getInstance();
        this.calendar.setTimeInMillis(timeMilli*1000);
    }
    private boolean isToday(){
        Calendar today = Calendar.getInstance();
        today.setTimeInMillis(System.currentTimeMillis());

        // Todays date
        int todayYear = today.get(Calendar.YEAR);
        int todayMonth = today.get(Calendar.MONTH);
        int todayDay = today.get(Calendar.DAY_OF_MONTH);

        // Date to compare with today
        int otherYear = this.calendar.get(Calendar.YEAR);
        int otherMonth = this.calendar.get(Calendar.MONTH);
        int otherDay = this.calendar.get(Calendar.DAY_OF_MONTH);

        if (todayYear==otherYear && todayMonth==otherMonth && todayDay==otherDay){
            return true;
        }
        return false;
    }
}

问题出在这段代码中:

    long timeMilli = timeSeconds * 1000;
    this.calendar = Calendar.getInstance();
    this.calendar.setTimeInMillis(timeMilli*1000);

你将时间乘以1000倍;删除其中一个
*1000
,您就可以开始了:)

问题出在这段代码中:

    long timeMilli = timeSeconds * 1000;
    this.calendar = Calendar.getInstance();
    this.calendar.setTimeInMillis(timeMilli*1000);
你将时间乘以1000倍;删除其中一个
*1000
,您就可以开始了:)

另一个答案是正确的。我发布这篇文章的目的是告诉您,
Calendar
类早已过时,它在java.time(现代java日期和时间API)中的替代品更易于使用,并提供了更简单、更清晰的代码。作为一个细节,它接受Unix时代以来的秒数,因此不需要乘以1000。你可能会想,这没什么大不了的,但是一个或另一个读者在理解你为什么要乘以1000之前可能还要三思。他们现在不需要

根据其他要求,您可能希望实例变量是
zoneDateTime
,而不是
Instant
。在这种情况下,只需将
atZone
调用放入构造函数中,而不是将其放入
isToday
方法中

链接:解释如何使用java.time

另一个答案是正确的。我发布这篇文章的目的是告诉您,
Calendar
类早已过时,它在java.time(现代java日期和时间API)中的替代品更易于使用,并提供了更简单、更清晰的代码。作为一个细节,它接受Unix时代以来的秒数,因此不需要乘以1000。你可能会想,这没什么大不了的,但是一个或另一个读者在理解你为什么要乘以1000之前可能还要三思。他们现在不需要

根据其他要求,您可能希望实例变量是
zoneDateTime
,而不是
Instant
。在这种情况下,只需将
atZone
调用放入构造函数中,而不是将其放入
isToday
方法中


Link:解释如何使用java.time。

最大的错误是使用旧的日期类而不是
java.time
,但是在构造函数中,您还将
1000
乘以两次。另请参阅。。。我不知道该说什么,诚实!最大的错误是使用旧的date类而不是
java.time
,但在构造函数中也要乘以
1000
两次。另请参见。。。我不知道该说什么,诚实!非常感谢您提供的信息。我将检查时间api。很高兴它接受了Unix时代以来的秒数!非常感谢您提供的信息。我将检查时间api。很高兴它接受了Unix时代以来的秒数!