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 local = LocalDateTime.now();
System.out.println("local = " + local);
long time2 = local.toInstant(ZoneOffset.UTC).toEpochMilli();
LocalDateTime 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() ;
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
)
long time = LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli();
TimeZone zone = TimeZone.getDefault();
if (!"Asia/Shanghai".equals(zone.getID())) {
time += 8 * 60 * 60 * 1000;
System.out.println("当前zone为:" + zone + ", 当前时间为:" + time);
Java 获得时区相关的类,主要是ZoneId,还有TimeZone(这个信息详细一点)
ZoneId 主要是通过列表选定了一些规定位置,然后通过这些位置代表的时区,来划分时区,例如 中国就是Asia/Shanghai
然后根据时区,我们可以根据 ZoneId ,来创建TimeZone 对象,再有 TimeZone 对象 来创建Calendar 对象
测试代码如下:
package te...
在开发时我们经常需要获取当前时间或者对时间进项处理(在某个时间的基础上增加或者减少),java获取时间的方法比较多,有LocalDateTime、Date、Calendar等,其中LocalDateTime是java8的新特性,相比较其它两个而言,LocalDateTime有很多优势,这也是最推荐使用的方法。下面我们先来介绍一个LocalDateTime的用法,然后介绍Date、Calendar的用法,最后比较它们的区别。
Java 可以通过 Timezone 获取时区,但是通过 Timezone 获取的时区是 JVM 初始化时保存的时区,并不是操作系统所设置的时区。当修改过操作系统的时区后,JVM 并不会同步更新。Timezone 获取时区的代码如下:// 获取 JVM 启动时获取的时区TimeZone.getDefault();// 获取任意指定区域的时区String[] zoneIDs = TimeZone.g...
如何使用Java获取时区的当前日期和时间?我的应用托管在伦敦服务器中。 我在西班牙马德里。 因此,时区为-2小时。如何获取带有时区的当前日期/时间。Date curr_date = new Date(System.currentTimeMillis());例如Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE"));与J...
然后想在获取到当地的时间,把获取到的时区传给下面这个方法里面
function getLocalTime(timezone) {
if (typeof timezone !== "number") {
return new Date();
var d = new Date();
var len =
1. TimeZone.getDefault()
TimeZone timeZone = TimeZone.getDefault();
System.out.println(timeZone.getDisplayName());
System.out.println(timeZone.getID());
// 中国标准时间
// Asia/Shanghai
2. System.getProperty(“user.timezone”)
String property = System.getProper
Instant获取的是格林威治标准时间(UTC时间)。因为Instant是表示时间戳的对象,它不依赖于时区信息。但是在显示Instant对象时,需要将其转换为特定时区的本地时间。但是此修改可能是全局性的,建议在代码启动之初设定全部使用同一时区时间,后面就不再频繁更改,避免产生时间错乱问题。java中如何获取utc时间,并转为Date对象,这是一个常见的问题。获取了UTC的毫秒时间,然后new一个Date对象。那么为什么不能获取,如何正确获取utc时间呢?时打印的是带时区的时间,而非UTC时间。
这里写自定义目录标题主要内容包括一 、先主要是Java8中LocalDate日期的操作1. Date转LocalDate、LocalDateTime2. 13位long类型转LocalDate3. 获取现在的日期4. 获取年月日5. 判断两个日期之间相差多少天6. 获得某个日期所在月的第一天、最后一天7. 某个月有多少天8. 比较两个LocalDate的大小9. 获取下一周的该星期、下个月的这天、下个月的1号10. 比较两个LocalDate相差多少年、月、天11. 通过10位或13位时间戳构建Instan
Java 可以通过 Timezone 获取时区,但是通过 Timezone 获取的时区是 JVM 初始化时保存的时区,并不是操作系统所设置的时区。当修改过操作系统的时区后,JVM 并不会同步更新。Timezone 获取时区的代码如下:
// 获取 JVM 启动时获取的时区
TimeZone.getDefault();
// 获取任意指定区域的时区
String[] zoneID...