不用方法获取当前时间

Get current time without methods

我正在尝试不用方法来做,以便更好地掌握概念。

我真的很亲近。我的时间数学似乎不对。我哪里不明白?

static void showCurrent(){
    Date today = new Date();
    long milliseconds = today.getTime(); // ex: 1651773923837
    
    long seconds = milliseconds / 1000;
    long minutes = seconds / 60;
    long hours = minutes / 60;

    long s = seconds % 60;
    long m = minutes % 60;
    long h = hours % 24;

    System.out.printf("Date: %s, Time: %d\n", today.toString(), milliseconds);
    System.out.println(h + ": " + m + ": " + s );

输出:

Date: Fri May 06 10:13:21 EDT 2022, Time: 1651846401839
14: 13: 21

根据 Javadoc 关于 Date::getTime:

Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object

重要的部分是“GMT”,它与您的时区不同:EDT,即... GMT - 4:00

避免遗留问题 date-time 类

java.util.Date 上的 toString 方法不幸 anti-feature 在生成文本时应用了 JVM 的当前默认时区。

永远不要使用 Date。多年前被现代 java.time 类.

取代

Instant

使用java.time.Instant.

捕捉当下。

Instant instant = Instant.now() ;

以标准 ISO 8601 格式生成文本。

String output = instant.toString() ;

获取自 1970 年第一个时刻的纪元参考以来的毫秒数,与 UTC 的偏移量为零 hours-minutes-seconds,1970-01-01T00:00Z。

long millis = instant.toEpochMilli() ;

LocalDateTime.now() 方法 returns LocalDateTime 的实例 class 所以如果你打印 LocalDateTime 的实例 class,它会打印当前时间和时间. 要获得正确的格式,您需要使用 JDK 1.8

中包含的 DateTimeFormatter class 来格式化当前日期
import java.time.format.DateTimeFormatter;  
import java.time.LocalDateTime;    
public class CurrentDateTime {    
  public static void main(String[] args) {    
   DateTimeFormatter date_wanted = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");  
   LocalDateTime now = LocalDateTime.now();  
   System.out.println(date_wanted.format(now));  
  }    
}