如何找到自1970年以来的秒数
iam在一个实时项目中工作,自1970年1月1日起,我被要求找到秒。我使用以下代码找出秒,但给出了错误的结果。代码如下。
public long returnSeconds(int year, int month, int date) { Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.set(1970, 01, 01);
calendar2.set(year, month, date);
long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long seconds = diff / 1000;
return seconds;
}
在上面代替year,month,date
我过去,我2011,10,1
越来越
1317510000
但是正确的答案是
1317427200
关于此的任何帮助对我都很有用。
回答:
根据您希望1317427200
成为输出的愿望,有几个问题需要解决。
首先,正如其他人提到的那样,java已经使用UTC 1/1/1970纪元。除非您具有怪异的语言环境规则,否则通常无需计算历元并进行减法。
其次,当您创建新的日历时,它会初始化为“现在”,因此它包括一天中的时间。更改年/月/日不会影响“时间”字段。因此,如果希望它代表日期的午夜,则需要在设置日期之前将日历清零。
第三,您尚未指定应该如何处理时区。夏令时可能会导致特定的壁挂日历所表示的绝对秒数有所不同,具体取决于JVM的运行位置。由于时代是UTC,我们可能想在UTC时间工作?您可能需要向与之连接的系统的制造商寻求澄清。
第四,Java中的月份为零索引。一月是0,十月是9。
放在一起
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));calendar.clear();
calendar.set(2011, Calendar.OCTOBER, 1);
long secondsSinceEpoch = calendar.getTimeInMillis() / 1000L;
那会给你 1317427200
以上是 如何找到自1970年以来的秒数 的全部内容, 来源链接: utcz.com/qa/420940.html