Java时间为什么从1970-01-01 00:00:00 000开始

不仅仅是Java,几乎所有的语言的时间都是从这一刻开始算起的.

原因:java起源于UNIX系统,而UNIX认为1970年1月1日0点是时间纪元.

最初计算机操作系统是32位,而时间也是用32位表示。
System.out.println(Integer.MAX_VALUE);#int的最大值
2147483647

    Integer在JAVA内用32位表示,因此32位能表示的最大值是2147483647。另外1年365天的总毫秒数是
    365*24*60*60*1000=31536000

2147483647/31536000 = 68.1

也就是说32位能表示的最长时间是68.1年,过了这个时间点,所有32位操作系统时间便会变为
10000000 00000000 00000000 00000000,所以采用时间类型是long类型

因为用32位来表示时间的最大间隔是1.6年,而最早出现的UNIX操作系统考虑到计算
机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始
时间),而java自然也遵循了这一约束。

System.out.println(Long.MIN_VALUE);//最大值
9223372036854775807

至于时间回归的现象随着64位操作系统的产生逐渐得到解决,因为用64位操作
系统可以时间表示到292278994-08-17 15:12:55 807,相信我们的N代子孙,哪
怕地球毁灭那天都不用愁不够用了,因为这个时间已经是亿年以后了。

 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
    Date date=new Date();
    date.setTime(0);
    System.out.println(sdf.format(date));

  打印结果:  1970-01-01 08:00:00 000 这是因为我门在东八区,比格林威治

  0时区早8个小时导致的。
### 回答1: 在Java中,可以使用以下方法将时间类型的数据转换为long类型: 1. getTime()方法:如果您有一个java.util.Date对象,您可以使用它的getTime()方法将其转换为long类型的时间戳,例如: ``` Date date = new Date(); long timestamp = date.getTime(); ``` 2. toInstant()方法:如果您有一个Java 8的LocalDateTime或ZonedDateTime对象,您可以使用它的toInstant()方法将其转换为Instant对象,然后使用Instant对象的toEpochMilli()方法将其转换为long类型的时间戳,例如: ``` LocalDateTime localDateTime = LocalDateTime.now(); Instant instant = localDateTime.toInstant(); long timestamp = instant.toEpochMilli(); ``` 3. parse()方法:如果您有一个时间格式的字符串,您可以使用它的parse()方法将其转换为java.util.Date对象,然后再使用getTime()方法将其转换为long类型的时间戳,例如: ``` String dateString = "2022-01-01T12:00:00.000Z"; Date date = Date.parse(dateString); long timestamp = date.getTime(); ``` 请注意,Java中的时间戳是从1970年1月1日00:00:00.000 GMT开始计算的,以毫秒为单。 ### 回答2: 将时间类型的数据转为Long类型可以通过以下几种方式实现: 1. 使用getTime()方法:对于Java中的Date类或Calendar类对象,可以使用getTime()方法获取其对应的毫秒值,即从1970年1月1日00:00:00开始时间戳,然后将其转换为Long类型。 示例代码: ```java Date date = new Date(); // 假设为当前时间 Long timestamp = date.getTime(); System.out.println(timestamp); ``` 2. 使用parse()方法:对于Java中的SimpleDateFormat类可以使用其parse()方法将字符串类型的时间转换为Date对象,然后再使用getTime()方法将其转换为Long类型。 示例代码: ```java String timeStr = "2022-01-01 00:00:00"; // 假设为时间字符串 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(timeStr); Long timestamp = date.getTime(); System.out.println(timestamp); ``` 3. 使用toInstant()方法:对于Java 8及以上版本中的LocalDateTime类,可以使用其toInstant()方法将其转换为Instant对象,然后再使用toEpochMilli()方法将其转换为毫秒值,最后将其转换为Long类型。 示例代码: ```java LocalDateTime dateTime = LocalDateTime.now(); // 假设为当前时间 Instant instant = dateTime.toInstant(); Long timestamp = instant.toEpochMilli(); System.out.println(timestamp); ``` 以上是将时间类型的数据转为Long类型的几种常见方式,根据具体的情况可选择合适的方式进行转换。 ### 回答3: 将时间类型的数据转为Long类型,可以使用Java中的Date类和Calendar类来实现。 首先,使用SimpleDateFormat类将时间类型的数据转换为日期格式的字符串。例如,假设时间类型的数据是一个String类型的变量timeStr,表示格式为"yyyy-MM-dd HH:mm:ss"的时间数据。 ```java String timeStr = "2022-01-01 12:00:00"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = dateFormat.parse(timeStr); ``` 接着,使用Calendar类将Date对象转换为Long类型的时间戳。时间戳是自1970年1月1日以来的毫秒数。 ```java Calendar calendar = Calendar.getInstance(); calendar.setTime(date); long timestamp = calendar.getTimeInMillis(); ``` 最后,可以将Long类型的时间戳用于需要进行时间计算或比较的操作。 需要注意的是,上述代码中的时间格式和转换方式是示例,实际应根据时间类型的具体格式和转换需求进行调整。另外,也可以使用其他第三方库或Java 8中新增的DateTime API来进行时间类型转换。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一缕阳光直射你的心扉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值