如何找到自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

回到顶部