如何获得自今年1月1日开始以来的Java小时数?也就是说,1月1日的第一个小时= 0001,我能用JodaTime或任何其他库来完成这个任务吗?谢谢,
发布于 2015-08-13 06:49:18
使用内置到Java8及更高版本中的java.time包 (教程):
ChronoUnit.HOURS.between(
  LocalDateTime.of(LocalDateTime.now().getYear(), 1, 1, 0, 0), 
  LocalDateTime.now())我觉得这是自我解释
发布于 2015-08-13 06:50:36
使用Java8API作为日期/时间
    LocalDateTime hournow = LocalDateTime.now();
    LocalDateTime startOfYear = LocalDateTime.of(hournow.getYear(), 1, 1, 0, 0);
    long hoursBetween = ChronoUnit.HOURS.between(startOfYear, hournow);
    System.out.println("hours between: " + hoursBetween);发布于 2015-08-13 10:12:18
我强烈怀疑,许多用户更愿意考虑dst的影响:
ZoneId zi = ZoneId.of("Europe/Paris"); // example
ZonedDateTime now = ZonedDateTime.now(zi);
ZonedDateTime start = ZonedDateTime.of(now.getYear(), 1, 1, 0, 0, 0, 0, zi);
long realDelta = ChronoUnit.HOURS.between(start, now);
System.out.println("hours between: " + realDelta); // 5386
// another way using Instant
Instant i2 = now.toInstant();
Instant i1 = start.toInstant();
System.out.println(i1); // 2014-12-31T23:00:00Z
System.out.println(i2); // 2015-08-13T09:55:53.353Z
System.out.println("duration=" + i1.until(i2, ChronoUnit.HOURS)); // 5386到目前为止,基于没有任何时区的LocalDateTime提出的解决方案将产生不同的结果(此处仅是名义的,而不是物理的持续时间):
LocalDateTime ldt2 = LocalDateTime.now();
LocalDateTime ldt1 = LocalDateTime.of(ldt2.getYear(), 1, 1, 0, 0);
long hoursBetween = ChronoUnit.HOURS.between(ldt1, ldt2);
System.out.println("hours between: " + hoursBetween); // 5385对于java.util.GregorianCalendar,结果将与基于ZonedDateTime的Java-8相同。其他库也提供类似的结果,但我忽略了这些细节,因为理解时区对结果的影响更为重要。
https://stackoverflow.com/questions/31981093
复制相似问题