输出时间
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+)。
Previous: 长整数类型和解决整数运算溢出的问题
Next: 浮点数类型