【Java】有关System.currentTimeMillis()的思考

在Java中无须引入任何类利用System.currentTimeMillis()能够轻松地取出1970年1月1日到现在的毫秒数,利用它能够轻松产生时间戳,甚至import java.text.SimpleDateFormat; import java.util.Date;之后配合new SimpleDateFormat("yyyy年MM月dd日hh:mm:ss E").format(new Date(System.currentTimeMillis())).toString();能够清楚输出当前的系统的年月日时分秒星期几。比如:

import java.text.SimpleDateFormat;
import java.util.Date;

public class JavaDate {
	public static void main(String[] args) {
		System.out.println(new SimpleDateFormat("yyyy年MM月dd日hh:mm:ss E").format(new Date(System.currentTimeMillis())).toString());
	}
}

运行结果就是当前系统的时间,如:2015年02月05日11:32:58 星期四

其中表示月的MM必须大写,区分表示分的mm

相信很多人都会了。

不仅是Java,很多编程语言都以1970年1月1日作为原点,这里面有个故事:1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX,新版于1971年发布。那时的计算机操作系统是32位,时间用32位有符号数表示,则可表示 68 年,用32位无符号数表示,可表示136年。他们认为以1970年为时间原点足够可以了。 因此,C的time函数就这么定了,后来的java等也用它,微机也用它,工作站本来就是unix系统当然也用它。由于主流计算机和操作系统都用它,其他仪器,手机等也就用它了。

然而System.currentTimeMillis()的返回值为Long,问题就来了,Long是有长度的,它只能代表一个长达32位的毫秒数,1970年1月1日逝去2G毫秒,也就是2147483647毫秒之后是2038年1月19日星期二晚上03:14:07。正如IP4的地址居然用尽一样,当时的科学家根本就没有想到计算机系统的普及率在今天觉得几乎人手几台一样,他们也没想到到了2038年1月19日星期二晚上03:14:07人们还会对智能系统进行研究,计算机居然不会淘汰,而是成为了必需品!

和本世纪初的千年虫(Y2K Bug)问题类似,计算机系统千年虫问题又称为2038年问题(Y2K38 BUG)。2038年问题不仅比千年虫更隐蔽,而且比之前千年虫问题更具有破坏力,因为千年虫问题只会导致应用层的程序出现问题,比如信用卡支付系统,或者管理系统。而2038这个bug,将会影响系统最底层的时间控制的功能。当时千年虫问题,已经困扰了很多部门了,不过最后把所有用00表示的时间,改成四位数字就可以了,但是2038年问题,必须改变内部表示时间控制的长度问题,可是现在推广64系统困难,中国大部分系统还是在WinXp的现状,先别说用户了,你让程序猿写出来的软件能够不兼容IE6,WINXP再说……更不要说64位机器了,很多电脑现在还不过是Win7
32位罢了!

时间: 2024-10-07 12:47:50

【Java】有关System.currentTimeMillis()的思考的相关文章

java的System.currentTimeMillis()和System.nanoTime()

转自https://my.oschina.net/20076678/blog/80592 java的System.currentTimeMillis()和System.nanoTime()有什么区别 java中System.nanoTime()返回的是纳秒,nanoTime而返回的可能是任意时间,甚至可能是负数--按照API的说明,nanoTime主要的用途是衡量一个时间段,比如说一段代码执行所 用的时间,获取数据库连接所用的时间,网络访问所用的时间等.另外,nanoTime提供了纳秒级别的精度

c# 实现 java 的 System.currentTimeMillis() 值

本文地址:http://www.cnblogs.com/jying/p/3875331.html 以下一句即可实现 java 中的 System.currentTimeMillis() 值 object currenttimemillis = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; 微软 TotalMilliseconds 的源码如下 ,由于返

Unix时间戳和Java 的 System.currentTimeMillis()的区别

[JAVA]比毫秒System.currentTimeMillis()更精确的时间戳(纳米级时间戳)

 纳秒 ns(nanosecond):纳秒, 时间单位.一秒的10亿分之一,即等于10的负9次方秒.常用作 内存读写速度的单位,其前面数字越小则表示速度越快. 1纳秒=1000 皮秒 1纳秒 =0.001  微秒 1纳秒=0.000001 毫秒 1纳秒=0.00000 0001秒 java的System.currentTimeMillis()和System.nanoTime()有什么区别 java中System.nanoTime()返回的是纳秒,nanoTime而返回的可能是任意时间,甚至可

我的Java开发学习之旅------>System.nanoTime与System.currentTimeMillis的区别

首先来看一道题:下面代码的输出结果是什么? import java.util.HashMap; import java.util.Map; public class HashMapTest { public static void main(String[] args) { Map<String, String> map=new HashMap<String, String>(); map.put(String.valueOf(System.currentTimeMillis())

java测试方法运行时间 System.currentTimeMillis();

测试: System.currentTimeMillis(); currentTimeMillis()返回以毫秒为单位的当前时间,返回的是当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量).注意,当返回值的时间单位是毫秒时,值的粒度取决于基础操作系统,并且粒度可能更大.例如,许多操作系统以几十毫秒为单位测量时间. 主要用法: (1)用来测试程序的运行时间:   如图中所示 (2)控制线程时间,刷新屏幕频率: [java] view plaincopyprint

java使用new Date()和System.currentTimeMillis()获取当前时间戳(转载)

转自:http://www.cnblogs.com/wuchen/archive/2012/06/30/2570746.html 在开发过程中,通常很多人都习惯使用new Date()来获取当前时间,使用起来也比较方便,同时还可以获取与当前时间有关的各方面信息,例如获取小时,分钟等等,而且还可以格式化输出,包含的信 息是比较丰富的.但是有些时候或许你并不需要获取那么多信息,你只需要关心它返回的毫秒数就行了,例如getTime().为了获取这个时间戳,很多人也喜欢使用new Date().getT

Java中使用new Date()和System.currentTimeMillis()获取当前时间戳的区别(转)(Java进阶-性能提升)

在开发过程中,通常很多人都习惯使用new Date()来获取当前时间,使用起来也比较方便,同时还可以获取与当前时间有关的各方面信息,例如获取小时,分钟等等,而且还可以格式化输出,包含的信息是比较丰富的.但是有些时候或许你并不需要获取那么多信息,你只需要关心它返回的毫秒数就行了,例如getTime().为了获取这个时间戳,很多人也喜欢使用new Date().getTime()去获取,咋一看没什么问题,但其实没这个必要.其实看一下Java的源码就知道了: public Date() { this(

java使用new Date()和System.currentTimeMillis()获取当前时间戳

在开发过程中,通常很多人都习惯使用new Date()来获取当前时间,使用起来也比较方便,同时还可以获取与当前时间有关的各方面信息,例如获取小时,分钟等等,而且还可以格式化输出,包含的信息是比较丰富的.但是有些时候或许你并不需要获取那么多信息,你只需要关心它返回的毫秒数就行了,例如getTime().为了获取这个时间戳,很多人也喜欢使用new Date().getTime()去获取,咋一看没什么问题,但其实没这个必要.其实看一下java的源码就知道了: public Date() { this(