JAVA 时区

package site.duanzy.util;

import java.time.ZoneId;
import java.time.ZonedDateTime;

/**
 * @author leo
 * @date 2022/3/25 16:32
 */
public class TimeZoneUtil {


    public static void main(String[] args) {
        ZonedDateTime zonedDateTime = ZonedDateTime.parse("2022-04-28T15:51:00+08:00");     // 夏令时
        ZonedDateTime zonedDateTime2 = ZonedDateTime.parse("2022-01-01T15:51:00+08:00");     // 冬令时
        ZonedDateTime zonedDateTime3 = ZonedDateTime.now();                                 // 冬令时

//        ZonedDateTime st = zonedDateTime.withZoneSameInstant(ZoneId.of("America/Los_Angeles"));
//        ZonedDateTime st = zonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York"));
//        ZonedDateTime st = zonedDateTime.withZoneSameInstant(ZoneId.of("America/Chicago"));
        ZonedDateTime st = zonedDateTime.withZoneSameInstant(ZoneId.of("Australia/Canberra"));
        ZonedDateTime st2 = zonedDateTime2.withZoneSameInstant(ZoneId.of("Australia/Canberra"));
        ZonedDateTime st3 = zonedDateTime3.withZoneSameInstant(ZoneId.of(convertTime("PST")));

        System.out.println(st.getHour());                       // 小时
        System.out.println(st.getDayOfWeek().getValue());       // 周
        System.out.println(st.toLocalDateTime());               // 字符串时间
        System.out.println("--------------------------------");

        System.out.println(st2.getHour());
        System.out.println(st2.getDayOfWeek().getValue());
        System.out.println(st2.toLocalDateTime());
        System.out.println("--------------------------------");

        System.out.println(st3.getHour());
        System.out.println(st3.getDayOfWeek().getValue());
        System.out.println(st3.toLocalDateTime());
    }

    /**
     * 简称转成详细
     * @param
     * @param timeZone
     * @return
     */
    private static String convertTime(String timeZone){
        String newHour = null;
        switch (timeZone){
            case "PST":
                // 洛杉矶,中国时间-16(夏令时-15)
                newHour = "America/Los_Angeles";
                break;
            case "EST":
                // 纽约,中国时间-13
                newHour = "America/New_York";
                break;
            case "CDT":
                // 芝加哥,中国时间-14
                newHour =  "America/Chicago";
                break;
            case "CET":
                // 柏林,中国时间-7
                newHour =  "Europe/Berlin";
                break;
            case "GMT":
                // 伦敦,中国时间-8
                newHour =  "Europe/London";
                break;
            case "CST":
                // 北京,中国时间-0
                newHour =  "Asia/Shanghai";
                break;
            case "JST":
                // 东京,中国时间+1
                newHour =  "Asia/Tokyo";
                break;
            case "AEST":
                // 堪培拉(澳大利亚的首都),中国时间+2
                newHour = "Australia/Canberra";
                break;

        }

        return newHour;
    }

}

执行结果:

17
4
2022-04-28T17:51
--------------------------------
18
6
2022-01-01T18:51
--------------------------------
1
5
2022-03-25T01:39:02.964

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的时区概念是非常重要的,因为在开发中需要处理不同时区的时间。下面是关于Java时区的一些详解: 1. 世界时区 全球被分为24个时区,每个时区都有一个对应的UTC偏移量,表示该地区与协调世界时(UTC)之间的差异。例如,北京时间是UTC+8,纽约时间是UTC-5。 2. Java时区 Java中的时区使用了ID来标识。它们遵循了IETF的时区标识符,例如“America/New_York”和“Asia/Shanghai”。这些ID是唯一的,并且对应于特定的时区偏移量和时区规则。 3. 时区的转换 使用Java中的DateTimeFormatter类,可以将时间从一个时区转换为另一个时区。例如,将纽约时间转换为北京时间: ``` DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime = LocalDateTime.parse("2022-06-30 10:30:00", formatter); ZoneId newYorkZone = ZoneId.of("America/New_York"); ZoneId beijingZone = ZoneId.of("Asia/Shanghai"); ZonedDateTime newYorkTime = ZonedDateTime.of(dateTime, newYorkZone); ZonedDateTime beijingTime = newYorkTime.withZoneSameInstant(beijingZone); System.out.println(beijingTime.format(formatter)); ``` 4. 时区的默认值 Java中的时区默认值是系统时区。可以使用System类的getProperty()方法获取系统时区: ``` System.out.println(System.getProperty("user.timezone")); ``` 5. 时区的设置 可以使用System类的setProperty()方法设置时区: ``` System.setProperty("user.timezone", "Asia/Shanghai"); ``` 需要注意的是,时区设置必须在程序启动时进行,否则可能会出现意料之外的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值