Java中的大纪元时间

时间:2014-10-21 06:23:29

标签: java

我想代表当前日期的1天作为纪元时间。今天的日期是10月20日。所以我想明天的时间。我有以下代码 -

    Calendar cal = Calendar.getInstance();
    cal.setTime(new Date());
    cal.add(Calendar.DAY_OF_YEAR, 1);
    int time = (int) ((cal.getTimeInMillis())/1000);
    System.out.println("TIME IS: " +time);

所以我基本上想要在一年中的当天加上1天,即10月20日,并将其表示为纪元时间。我以秒为单位显示时间,因此除以1000.该程序的结果是1413958770.从今天开始的1天将是86400秒。纪元时间究竟是如何运作的?我理解它自1970年以来就给出了时间,但如果情况确实如此,那么价值就不会那么小:-)。我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:5)

让我们做一些基本的数学运算:

  • 一分钟有60秒
  • 一小时有60分钟
  • 一天有24小时
  • 一年有365天

    1413958770 / (60 * 60 * 365 * 24) = 44,8
    

test it

到1970年增加44,8年,你将在2014年。所以没有错。

答案 1 :(得分:3)

如果"今天"是时代,它应该代表" 0,任何时间从"现在"衡量或与之比较应该从中减去,例如......

Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
long now = cal.getTimeInMillis();
cal.add(Calendar.DAY_OF_YEAR, 1);

long then = cal.getTimeInMillis();
long secondsFromEpoch = (then - now) / 1000;

System.out.println(secondsFromEpoch);

答案 2 :(得分:1)

Unix时间或POSIX时间或纪元时间是用于描述时间瞬间的系统,定义为自1970年1月1日星期四00:00:00协调世界时(UTC)以来经过的秒数,不计闰秒。

在Java中,您只需使用以下语句即可获得它。

long current_time = System.currentTimeMillis() * 1000000L;

long epoch = date.getTime();

答案 3 :(得分:0)

各种计算机系统都使用a couple dozen epochs。 1970年初UTC是常见的,但肯定不是当前使用的唯一时代。并且各种系统使用整秒,毫秒,微秒和纳秒来跟踪纪元以来的时间。因此,不要使用含糊的术语"纪元时间",直接说出你想要的东西会更有用。在这种情况下,它似乎是从1970年世界贸易组织开始到明天的整个秒数#34;。

也许你只是对数学和数字感到好奇。但是如果你认真对待日期工作,那么我建议在Java 8中使用Joda-Time库或java.time包。

在拍摄日期和定义一天的开始时,时区至关重要。

以下是使用Joda-Time 2.5的示例代码。

DateTimeZone zone = DateTimeZone.forID( "Australia/Melbourne" );
DateTime tomorrowStart = DateTime.now( zone ).plusDays( 1 ).withTimeAtStartOfDay();
long secondsSinceUnixEpoch = ( tomorrowStart.getMillis() / 1000 );