unix time - 用Java计算当前时间

时间:2015-03-09 19:27:43

标签: java date unix datetime

我试图从System.currentTimeMillis()获取当前时间,但我似乎无法弄清楚如何,我尝试将毫秒的时间除以1000,我想这给了我几秒钟,但我想得到当前小时的价值。我想如果我做这个时间(ms)/ 1000然后结果/ 3600?是吗 ? 请指教。

4 个答案:

答案 0 :(得分:2)

SimpleDateFormat df = new SimpleDateFormat("hh:mm");
String time = df.format(new Date(System.currentTimeMillis()));

答案 1 :(得分:2)

TL;博士

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )
             .getHour();

java.time

问题和其他答案使用现在由java.time取代的麻烦的旧遗留日期时间类。

以UTC格式获取当前时刻。

Instant instant = Instant.now();

申请时区。在任何特定时刻,日期和时间在全球范围内因地区而异。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.at( z );

询问小时。

int hourOfDay = zdt.getHour();

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuarter等。

计数-从历元

在评论中,您提到希望将时间跟踪为epoch的毫秒数。

出于多种原因,我强烈建议不要这样做。它使调试变得非常困难,因为人类无法读取长整数并破译日期时间的含义。所以bug可能不会被发现。来自时代的计数不是自我记录的,并且接收者可能对其含义感到困惑。有些人从纪元开始计算整秒,其他人则是毫秒,其他微秒,其他纳秒,还有一些人使用其他粒度。至于时代,哪一个?在各种计算系统中,有couple dozen different points时间用作时期参考。

但是如果你坚持使用自1970年开始的时期(UT​​C 1970-01-01T00:00:00)以来的毫秒数,请从Instant生成此数字。

long millisecondsSinceEpochOf1970 = Instant.now().toEpochMilli() ;

相反,我建议......在将日期时间值作为字符串交换时,请使用标准ISO 8601格式。这些格式是人类可读的,即使在各种文化中也是直观的,自我记录,可识别,易于解析和明智。

通常您应该使用UTC。 UTC值的ISO 8601格式在末尾规范地使用ZZulu的缩写,表示UTC。

  

2016-09-16T20:46:01Z

Instant类中解析/生成字符串时,默认使用此格式。

Instant.parse( "2016-09-16T20:46:01Z" )
myInstant.toString()  // Result: 2016-09-16T20:46:01Z

答案 2 :(得分:1)

使用Calendar

int hourOfDay = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);

答案 3 :(得分:1)

如果你想要直接数学路线,你会想要使用除法和模数。

long x = System.currentTimeMillis();
System.out.println("Seconds " + x/1000);
x /= 1000;
System.out.println("Minutes " + x/60);
x /= 60;
System.out.println("Hours " + x/60);
x /= 60;
System.out.println("Hours (24hr) UTC - " + x%24);
System.out.println("Hours (12hr) UTC - " + x%12);

这将产生以下输出(此时为UTC时间下午7:50)

Seconds 1425930629
Minutes 23765510
Hours 396091
Hours (24hr) UTC - 19
Hours (12hr) UTC - 7