输出时间

输出时间

Java 中提供一个 System.currentTimeMillis() 方法,这个方法返回从 1970年1月1日零点到此时此刻所经历的毫秒数,其数据类型就是 long。知道这个值,就可以计算当前的时间,或者获取两个时间点之间的时间间隔。

long time = System.currentTimeMillis();
System.out.println(time); // 输出类似:1569801956868Code language: JavaScript (javascript)

这个 long 值是不断改变的,因为时间不会停止。

为什么时间从 1970 年开始计算(时间戳)

1969年8月,贝尔实验室的程序员肯·汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用 B 编译语言在老旧的 PDP-7 机器上开发出了 Unix 的一个版本。随后,汤普逊和同事丹尼斯·里奇改进了 B 语言,开发出了 C 语言,重写了 UNIX,新版于1971年发布。

那时的计算机操作系统是32位,时间用32位有符号数表示则可表示68年,用32位无符号数表示可表示136年。他们认为以1970年为时间原点足够可以了。因此,C 的 time 函数就这么定了,后来的 Java 等也用它。1970年1月1日算 UNIX 和 C 语言生日。

一年是多少毫秒?

365天 × 24小时 × 60分钟 × 60秒 × 1000毫秒 = 31,536,000,000 毫秒

时间戳与时间互相转换

public static void main(String[] args) throws ParseException {

    // 得到时间戳
    long time = System.currentTimeMillis();
    System.out.println(time); // 输出类似:1569802498428

    // 通过时间戳创建日期对象
    Date date = new Date(time);

    // 格式化时间
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM月dd日HH时mm分ss秒");
    String formatTime = dateFormat.format(date);
    System.out.println(formatTime); // 输出类似:2019-09月30日08时14分58秒

    // 时间转时间戳
    SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM月dd日HH时mm分ss秒");
    Date date2 = dateFormat2.parse(formatTime);
    long ts = date2.getTime();
    System.out.println(ts);
}Code language: JavaScript (javascript)

常用转换方式总结

操作代码
获取当前时间戳long time = System.currentTimeMillis();
时间戳转时间Date date = new Date(time);
格式化输出SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = sdf.format(date);
时间字符串转时间戳Date date = sdf.parse(str); long ts = date.getTime();

注意:SimpleDateFormat 不是线程安全的,在多线程环境下需要注意同步或使用 DateTimeFormatter(Java 8+)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注