【java】带时区的时间格式化

该博客演示了如何在Java中使用`SimpleDateFormat`和`ZoneId`进行时间格式化,并通过循环遍历不同时区显示时间。示例代码展示了从系统默认时区(上海,东八区)到国际日期变更线(GMT+12:00和GMT-12:00)的时间转换效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  • jdk1.8
  • 当前时区
    在这里插入图片描述

带时区格式化时间

为SimpleDateFormat对象指定时区后,再执行格式化。

Calendar cal = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");

ZoneId zoneId = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(9));
TimeZone timeZone = TimeZone.getTimeZone(zoneId);
df.setTimeZone(timeZone);
System.out.println(df.format(cal.getTime()));
  • 将时间格式化成东九区的时间

示例

package com.example.demo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.TimeZone;

public class TestMain {

	public static void main(String[] args) throws ParseException {
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
		TimeZone timeZone;
		ZoneId zoneId;
		
		System.out.println("user.timezone = " + System.getProperty("user.timezone"));
		
		zoneId = ZoneId.systemDefault();
		System.out.println("zoneId = " + zoneId);
		timeZone = TimeZone.getTimeZone(zoneId);
		df.setTimeZone(timeZone);
		System.out.println(df.format(cal.getTime()));
		
		for (int i=0;i<=12;i++) {
			zoneId = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(i));
			System.out.println("zoneId = " + zoneId);
			timeZone = TimeZone.getTimeZone(zoneId);
			df.setTimeZone(timeZone);
			System.out.println(df.format(cal.getTime()));
		}
		for (int i=-0;i>=-12;i--) {
			zoneId = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(i));
			System.out.println("zoneId = " + zoneId);
			timeZone = TimeZone.getTimeZone(zoneId);
			df.setTimeZone(timeZone);
			System.out.println(df.format(cal.getTime()));
		}
	}

}

输出

user.timezone = Asia/Shanghai
zoneId = Asia/Shanghai
2021-09-26T18:20:09+08:00
zoneId = GMT
2021-09-26T10:20:09Z
zoneId = GMT+01:00
2021-09-26T11:20:09+01:00
zoneId = GMT+02:00
2021-09-26T12:20:09+02:00
zoneId = GMT+03:00
2021-09-26T13:20:09+03:00
zoneId = GMT+04:00
2021-09-26T14:20:09+04:00
zoneId = GMT+05:00
2021-09-26T15:20:09+05:00
zoneId = GMT+06:00
2021-09-26T16:20:09+06:00
zoneId = GMT+07:00
2021-09-26T17:20:09+07:00
zoneId = GMT+08:00
2021-09-26T18:20:09+08:00
zoneId = GMT+09:00
2021-09-26T19:20:09+09:00
zoneId = GMT+10:00
2021-09-26T20:20:09+10:00
zoneId = GMT+11:00
2021-09-26T21:20:09+11:00
zoneId = GMT+12:00
2021-09-26T22:20:09+12:00
zoneId = GMT
2021-09-26T10:20:09Z
zoneId = GMT-01:00
2021-09-26T09:20:09-01:00
zoneId = GMT-02:00
2021-09-26T08:20:09-02:00
zoneId = GMT-03:00
2021-09-26T07:20:09-03:00
zoneId = GMT-04:00
2021-09-26T06:20:09-04:00
zoneId = GMT-05:00
2021-09-26T05:20:09-05:00
zoneId = GMT-06:00
2021-09-26T04:20:09-06:00
zoneId = GMT-07:00
2021-09-26T03:20:09-07:00
zoneId = GMT-08:00
2021-09-26T02:20:09-08:00
zoneId = GMT-09:00
2021-09-26T01:20:09-09:00
zoneId = GMT-10:00
2021-09-26T00:20:09-10:00
zoneId = GMT-11:00
2021-09-25T23:20:09-11:00
zoneId = GMT-12:00
2021-09-25T22:20:09-12:00
  • zoneId = Asia/Shanghai是系统默认时区。zoneId = Asia/Shanghai也就是东八区,其时间与zoneId = GMT+08:00一样。
  • zoneId = GMT+00:00zoneId = GMT+00:00是同一个时区,因此时间一样。
  • zoneId = GMT+12:00zoneId = GMT-12:00是国际日期变更线所在,因此时间相差24小时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值