Java获取当前时区时间

  • System.currentTimeMillis
  • LocalDateTime
  • 最终结果

全球根据纬度不同,划分不同的时区。对于此时此刻,大家同处同一个时间点,但是,每个时区的时间表示是不同的。Java可以使用 System.currentTimeMillisLocalDateTime相关代码获取当前时区时间。

System.currentTimeMillis

  • 获取当前毫秒数,与时区无关,我们Java的new Date()方法,也是通过它创建当前时间实例。
  • 获得的是自1970-01-01 00:00:00.000到当前时刻的时间距离,类型为long
  • 获取的毫秒数是系统当前时区的1970-01-01 00:00:00.000以来的毫秒数,如果使用的是linux系统默认时区(0),则对于我国的+8时区刚好差8小时毫秒数
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.TimeZone;public class Test2 {public static void main(String[] args) {String os = System.getProperty("os.name");TimeZone zone = TimeZone.getDefault();System.out.println("zone = " + zone.getID() + ", os = " + os);long time1 = System.currentTimeMillis();LocalDateTime local = LocalDateTime.now();long time2 = local.toInstant(ZoneOffset.UTC).toEpochMilli();TimeZone.setDefault(TimeZone.getTimeZone("UTC"));Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));long time3 = calendar.getTime().getTime() + 8 * 60 * 60 * 1000; System.out.println("time1 = " + time1);System.out.println("time2 = " + time2);System.out.println("time3 = " + time3);}
}

运行结果

zone = Asia/Shanghai, os = Windows 10
time1 = 1662279837186
time2 = 1662308637222
time3 = 1662308637235

LocalDateTime

  • LocalDateTime 本身不包含时区信息,它存储了年、月、日、小时、分钟、秒和纳秒等数字。
  • LocalDateTime 默认只是存储当前系统所在时区当前时刻的年月日时分秒的数字
  • LocalDateTime.now 可以在传递参数时指定时区
  • toInstant()可以指定时区生成毫秒数(这里指定国际时间 UTC 0,实际上就是 System.currentTimeMillis() + 时区偏移毫秒数)
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.TimeZone;public class Test3 {public static void main(String[] args) {String os = System.getProperty("os.name");TimeZone zone = TimeZone.getDefault();System.out.println("zone = " + zone.getID() + ", os = " + os);long time1 = System.currentTimeMillis();// LocalDateTime itself does not contain time zone information, it stores numbers such as year, month, day, hour, minute, second, and nanosecond.LocalDateTime local = LocalDateTime.now();System.out.println("local = " + local);long time2 = local.toInstant(ZoneOffset.UTC).toEpochMilli();// LocalDateTime.now can specify the time zone when passing the parameterLocalDateTime dtUtc = LocalDateTime.now(ZoneOffset.UTC);    System.out.println("dtUtc = " + dtUtc);long time3 = dtUtc.toInstant(ZoneOffset.UTC).toEpochMilli();Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));long time4 = calendar.getTime().getTime() ;//+ 8 * 60 * 60 * 1000;   System.out.println("time1 = " + time1);System.out.println("time2 = " + time2);System.out.println("time3 = " + time3);System.out.println("time4 = " + time3);}
}

运行结果

zone = Asia/Shanghai, os = Windows 10
local = 2022-09-04T16:25:27.030469500
dtUtc = 2022-09-04T08:25:27.031493500
time1 = 1662279926996
time2 = 1662308727030
time3 = 1662279927031
time4 = 1662279927031

最终结果

  • 其实只要服务器设置的时区是正确的,无论LocalDateTime.now()还是System.currentTimeMillis()都是正确的,都没有问题
  • 如果时区不正确,就要考虑针对时区处理下8小时毫秒数差距
  • 下面使用LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli()获取当前毫秒数,再获取系统时区,判断是否为Asia/Shanghai,若不是(linux默认0时区),则加8小时毫秒数(8 * 60 * 60 * 1000
                // LocalDateTime 本身不包含时区信息(只是当前系统所在时区当前时刻的年月日时分秒)// toInstant可以指定时区生成毫秒数(这里指定国际时间 UTC 0,实际上就是 System.currentTimeMillis() + 时区偏移毫秒数)long time = LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli();TimeZone zone = TimeZone.getDefault();// 东八区为北京/上海时间,国内一般使用 UTC +8(但是linux服务器、docker初始都是 UTC 0)if (!"Asia/Shanghai".equals(zone.getID())) {time += 8 * 60 * 60 * 1000;}System.out.println("当前zone为:" + zone + ", 当前时间为:" + time);

Java获取当前时区时间LocalDateTime与System.currentTimeMillis相关推荐

  1. java获取当前日期和时间的二种方法分享

    有两种方法: 方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码: import java.util.*; import j ...

  2. java获取Date类型时间的前3个月,后3个月,前3天,后3天

    java获取Date类型时间的前3个月,后3个月,前3天,后3天 Calendar cal = Calendar.getInstance(); Date date = new Date(); cal. ...

  3. Java获取系统当前时间

    本篇文章帮大家学习java获取系统当前时间,包含了Java获取系统当前时间使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 以下实例演示了如何使用 Date 类及 Simp ...

  4. Java获取yyyymmddhhmmss格式时间

    Java获取"yyyymmddhhmmss"格式时间 import java.text.SimpleDateFormat; import java.util.Date; impor ...

  5. java获取当前系统时间毫秒_java 获取当前系统时间简写 | 学步园

    本文是集合各位网友的经典,在加上我的理解,后续会不断完善. 1.java.util.Date类型转换成long类型 java.util.Date dt = new Date(); System.out ...

  6. java获取系统当前时间格式化_java 获取系统当前时间并格式化

    java 获取系统当前时间并格式化 CreateTime--2018年5月9日11:41:00 Author:Marydon 实现方式有三种 updateTime--2018年7月23日09点32分 ...

  7. Java获取指定时区的时间格式

    示例 分享一个获取指定时区的时间格式方法:timeZoneOffset指定为8,获取东8区的时间,timeZoneOffset指定为-5,获取西5区的时间. import java.text.Simp ...

  8. JAVA获取当前系统时间System.currentTimeMillis()

    System.currentTimeMillis()产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数,Date()其实就是相当于Date(System.currentTimeMi ...

  9. Java获取当前日期和时间

    文章目录 1. System.currentTimeMillis() 2. Java.util.Date 3. Calendar API 4. Date/Time API 4.1 LocalDate ...

最新文章

  1. 微信小游戏游戏显示html控件,微信小程序中如何渲染html内容(代码示例)
  2. pandas 批量修改列名_pandas修改DataFrame列名的方法
  3. python语言中的缩进是什么意思_python编程中的缩进是什么意思
  4. [Vue warn]: Error in mount hook: “TypeError: Cannot read properties of null (reading ‘getAttribute‘)
  5. Stream流的使用函数式接口
  6. Atitit 单点登录实现几种模式架构图 目录 1. 因此要点也就以下两个:存储信任验证信任 1 1.1. 共享cookie (最简单 1 1.2. 通过 url带token参数跳转 1 1.3.
  7. 你只管打开这个视频,剩下的交给「卧槽」
  8. js实现首尾相连左右循环切换效果
  9. Python9--面向对象编程
  10. html光标效果,css鼠标光标样式
  11. 2007年中考语文模拟试题1
  12. 黑苹果2k显示器开启hidpi_黑苹果无核显开启macOS-ipad随航功能
  13. 几何光学学习笔记(9)- 3.3 理想光学系统的物像关系
  14. gerrit配置管理
  15. vue如何split_Vue中的join(),reverse()与 split()函数用法解析
  16. bootstrap过滤
  17. 大数据第一天 Hadoop01-入门集群环境搭建
  18. windows98的含义
  19. 吴恩达ex3_Andrew Ng在Coursera上课程ex3的一点小心得
  20. html中em标签是干嘛用的,html里em的标签有什么用

热门文章

  1. Android开发必备之Picasso加载图片
  2. 五大评价偏误 | 管理者如何做到客观评价员工?
  3. Springboot项目中通过谷歌的guava实现令牌桶算法,来进行请求限流
  4. 2018社区计算机考试题,2018年社区工作者考试模拟题―行测全卷试题(4.10)
  5. Vue Component标签
  6. 大话数据结构笔记(一)
  7. android最终幻想4中文,最终幻想4下载
  8. 【最全】阶乘算法!(python和C语言)
  9. 《脑机接口导论》学习笔记 2.神经科学基础
  10. 艺龙java面试题,同城艺龙2018秋招Java笔试之newInstance()