Java currentTimeMillis()方法介绍

article/2025/10/30 10:44:50

一、官方文档

参考自Java SE 8官方文档:
在这里插入图片描述

方法功能:返回从1970年1月1日午夜(UTC)开始到当前时间的毫秒值.

其中,需要特别说明的地方

1.午夜(midnight)指的时间是 0时0分0秒,UTC表示该时间是0时区的时间
2.当前时间,不是指我们北京时间(UTC+8,东八区)的当前时间,而是0时区的当前时间。

例如,你现在的时间是1970-01-01 08:00:01(UTC+8),此刻0时区的时间是1970-01-01 00:00:01(UTC),共经过了1秒,所以计算机中存储的毫秒值是1000。

二、时间表示的起源及2038年问题

UNIX系统把1970年1月1日 00:00:00 GMT(GMT也表示0时区含义)作为时间的开始,称为纪元。

当时,操作系统是32位的,综合考虑决定使用32位的有符号数存储时间。对于1970年1月1日 00:00:00 UTC (等价我们的时间1970年1月1日 08:00:00 UTC+8)在计算机中存储为0。

注意,在UNIX中存储的值的单位是秒,在Java编程语言中的值的单位是毫秒。

用32位有符号能表示的最大值是01111111 11111111 11111111 11111111, 即214748367, 对应UTC时间2038年1月19日3时14分7秒。过了这个时间点,时间会溢出并变成10000000 00000000 00000000 00000000,即-214748368,对应的UTC时间1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。

要解决这个问题,最简单的方式是扩展UNIX时间的长度,用64位数字来表示它。64位二进制数的实际可用位数是63位。最大表示到公历的UTC时间292277026596年12月4日。如果那个时候人类文明还存在的话。公元纪年很可能已经因为太难用而被抛弃了。理想的情况是到2038年, 64位系统已经成为主流,从而避免特意去修正这个问题所需要的大量开销。否则,人们就必须把新的64位时间拆分成两部分并分别保存在两个变量里,这是一个麻烦而且效率低下的选择。

许多操作系统和编程语言都是以Unix为基础的,因此时间的起点,纪元通常和Unix选定的1970年1月1日 00:00:00 GMT一致。

三、Java中时间的表示

文章最开始就提到:时间是从1970年1月1日午夜(UTC)开始到当前时间的毫秒值。

Java中使用java.util.Date保存该毫秒值。

使用指定的long类型的毫秒值作为参数,初始化Date对象
在这里插入图片描述
默认构造函数使用当前时间的毫秒值初始化Date对象
在这里插入图片描述

另外,我们可以看到返回值是long类型,在Java中毫秒值是用64位存储的,不存在2038年的问题。

第一点,对于1970-01-01 00:00:01(UTC),毫秒值应该是1000,那么Java的实际存储值是1000吗?让我们来做个实验吧。


public static void main( String[] args ) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");// 设置时区0时区sdf.setTimeZone(TimeZone.getTimeZone("GMT"));String source = "1970-01-01 00:00:01";Date data = sdf.parse(source);System.out.println("0时区时间:" + source +", 保存的毫秒值:" + data.getTime());}

运行结果,和我们期待的一样:
在这里插入图片描述

第二点,我们的东八区北京时间1970-01-01 08:00:01(UTC+8),存储值也是1000吗?注意,这里的时间是8小时0分1秒

    public static void main( String[] args ) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");// 设置时区为东八区sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));String source = "1970-01-01 08:00:01";Date data = sdf.parse(source);System.out.println("东八区时间:" + source +", 保存的毫秒值:" + data.getTime());}
}

运行结果如下图所示,验证了当前时间是指0时区的时间。

在这里插入图片描述

第三点,对于2038年1月19日3时14分7秒(UTC),在UNIX32位系统中保存为int的最大值214748367(秒),那么在Java的64位long类型中保存的值是214748367 * 1000 = 2147483671000毫秒吗?

     public static void main( String[] args ) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");// 设置时区0时区sdf.setTimeZone(TimeZone.getTimeZone("GMT"));String source = "2038-01-19 03:14:07";Date data = sdf.parse(source);System.out.println("0时区时间:" + source +", 保存的毫秒值:" + data.getTime());System.out.println("int最大值*1000:" + (long)Integer.MAX_VALUE * 1000);}

运行结果,也和我们期待的一致

在这里插入图片描述


参考文章列表: 【[关于1970-1-1 00:00.000的知识](https://blog.csdn.net/tianzizhi/article/details/4547373) 】

http://chatgpt.dhexx.cn/article/OG84g06J.shtml

相关文章

Android中Intent和IntentFilter进行通信

文章目录 Intent启动不同组件的方法ActivityServiceBroadcastReceiver Data,Type属性与intent-filter配置指定Action调用系统的Activity启动Activity的标准Action常量以及对应的字符串标准的Category常量以及对应的字符串 实例一查看并获取联系人电话MainActivity代…

三、Intent 和 Intent过滤器(IntentFilter)

Intent(意图): Intent 是一个消息传递对象,是我们要执行操作的一个抽象描述。我们可以使用它在相应的组件中传递消息和请求。下面是它的主要使用场景: 1. 启动Activity 通过 startActivity() 或者 startActivityForRes…

【Android】Intent 和 Intent Filter

一. Intent 简介 Intent 是一个消息传递对象,您可以用来从其他应用组件请求操作。可以用于:启动 Activity、启动服务、传递广播。 https://developer.android.com/guide/components/intents-filtershttps://developer.android.com/guide/components/i…

Android开发——IntentFilter的匹配规则

1. IntentFilter中的过滤信息 启动Activity分为显式调用和隐式调用,前者没什么好讲的,后者需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。包括action、category、data。 一个Activity中可以有多个IntentFilter,一个Intent…

Android中的Intent和Intent-filter总结

一.相关概念 (一)基本概念 Intent中文意思指”意图”,按照Android的设计理念,Android使用Intent来封装程序的”调用意图”,不管启动Activity、Service、BroadcastReceiver,Android都使用统一的Intent对象来封装这一”启动意图”。此外,Inten…

【intent-filter】AndroidManifest中<intent-filter>标签的 部分作用

这里写自定义目录标题 AndroidManifest.xmlIntent-filter 标签Intent-filter 标签中的常用元素Intent-filter 标签的作用Intent对象Intent显式启动活动窗口Intent隐式启动(重要) AndroidManifest.xml AndroidManifest.xml是安卓开发中主配置文件&#x…

IntentFilter功能简介

1.什么是IntentFilter ? IntentFilter翻译成中文就是“意图过滤器”,主要用来过滤隐式意图。当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可以响应该操作的组件,服务。 例如:当用户点击…

简述 IntentFilter(意图过滤器)

转载自:http://www.cnblogs.com/ywtk/p/4158103.html 侵删 1.什么是IntentFilter ? IntentFilter翻译成中文就是“意图过滤器”,主要用来过滤隐式意图。当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可…

IntentFilter详解

IntentFilter的意思就是意图过滤器,当我们隐式的启动系统组件的时候,就会根据IntentFilter来筛选出合适的进行启动。 如果组件的 IntentFilter 与 Intent 中的 IntentFilter 正好匹配,系统就会启动该组件,并把 Intent 传递给它。如…

WPF MessageBox简单用法

1、弹出小框 用法: if (MessageBox.Show("内容", "标题", MessageBoxButton.YesNo, MessageBoxImage.Information) MessageBoxResult.Yes){label1.Content "yes";}else{label1.Content "no";} 2、例子 if (MessageBo…

C# winform 中MessageBox用法大全(附效果图)

我们在程序中经常会用到MessageBox。 MessageBox.Show()共有21中重载方法。现将其常见用法总结如下: 1.MessageBox.Show(“Hello~~~~”); 最简单的,只显示提示信息。 2.MessageBox.Show(“There are something wrong!”,“ERROR”); 可以给消息框加上…

MessageBox使用详解

Messagebox是我们编写程序时都会用到的东西&#xff0c;我每次使用的时候都能让它显示出来&#xff0c;但是我并不了解它的结构&#xff0c;或者说语法&#xff0c;下面简单总结一下。 语法 Messagebox(<字符串>text,<字符串>title&#xff0c;messageboxbuttons&a…

C#中Messagebox的简单使用

MessageBox的使用方法比较多&#xff0c;下面对常用的几种做了简单的说明&#xff0c;详细的资料可参考微软官方文档。 Messagebox.Show(String) 显示具有指定文本的消息框。 private void button1_Click(object sender, EventArgs e){//Show(String).显示具有指定文本的消息…

MessageBoxA 和MessageBoxW

文章目录 第一个参数&#xff1a;第二个参数&#xff1a;第三个参数&#xff1a;第四个参数&#xff1a;补充代码实现 MessageBoxA(NULL, text, title, MB_OK) 第一个参数&#xff1a; HWND hWnd 传入一个句柄&#xff0c;这个窗口句柄代表的窗口就是这个消息窗口的所有者&…

C#中MessageBox()用法详解

简介&#xff1a; MessageBox&#xff08;&#xff09;功能是显示一个消息对话框&#xff0c;其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息&#xff0c;如状态或错误的信息。 格式&#xff1a; MessageBox.Show&#xff08;string Text, string Caption,…

C/C++ MessageBox() 弹窗的用法

C/C MessageBox 的用法 目录 一、语法 二、头文件 三、常量 图标常量&#xff0c;按钮常量&#xff0c;返回值 四、示范 五、成品 六、通过返回值判断点击的按钮是什么 七、通过输入的文字来改变弹窗上的文字 一、语法 MessageBox(NULL,("对话框内容"),("对话…

MessageBox()函数用法及参数详解

MessageBox函数 显示模式对话框&#xff0c;其中包含系统图标&#xff0c;一组按钮和简要的特定于应用程序的消息&#xff0c;例如状态或错误信息。消息框返回一个整数值&#xff0c;指示用户单击的按钮。 语法 int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCapti…

MessageBox.Show 用法介绍

简介摘要&#xff1a;MessageBox.Show (String) 显示具有指定文本的消息框。 由 .NET Compact Framework 支持。 MessageBox.Show (IWin32Window, String) 在指定对象的前面显示具有指定文本的消息框。 MessageBox.Show (String) 显示具有指定文本的消息框。 由 .NET Compac…

C# MessageBox用法大全

C#中MessageBox用法大全&#xff08;附效果图&#xff09; 我们在程序中经常会用到MessageBox。 MessageBox.Show()共有21中重载方法。现将其常见用法总结如下&#xff1a; 1.MessageBox.Show("Hello~~~~"); 最简单的&#xff0c;只显示提示信息。 2.MessageBox.S…

MessageBox 用法详解与实例

摘自&#xff1a;教育网-自学之路&#xff1a;http://www.selfroad.com.cn/content.asp?id83 MessageBox这个函数可以在VC里面显示一个标准对话框&#xff0c;是比较常用的一个信息对话框&#xff0c;其不仅能够定义显示的信息内容、信息提示图标&#xff0c;而且可以定义按钮…