Java:Unix时间(秒到毫秒)
我从一个json文件中得到一个10位数的时间戳,我刚刚发现这是Unix时间,单位是秒,而不是毫秒 所以我去了我的DateUtils类,将时间戳(秒)乘以1000,以便将其转换为时间戳(毫秒) 当我尝试测试isToday()时,这行代码给了我大约50000年的时间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
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时代以来的秒数!