gpt4 book ai didi

java - Calendar.HOUR_OF_DAY 混淆

转载 作者:行者123 更新时间:2023-11-29 04:48:59 26 4
gpt4 key购买 nike

我有这段代码:

Calendar cal = Calendar.getInstance();
cal.setTime(pDatum);
cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(pHHMMTP.substring(0, 2)));
cal.set(Calendar.MINUTE, Integer.valueOf(pHHMMTP.substring(2, 4)));
cal.set(Calendar.MILLISECOND, 0);
System.out.println(cal.getTime());

其中 pDatumSun Mar 27 00:00:00 CET 2016pHHMMTP02485pHHMMTP.substring(0, 2)02

输出是:

Sun Mar 27 03:48:00 CEST 2016

我希望:

Sun Mar 27 02:48:00 CEST 2016

起初我认为这是一个 TimeZone 问题,但使用这段代码我得到了相同的输出:

Calendar cal = Calendar.getInstance();
TimeZone tz = TimeZone.getTimeZone("GMT");
cal.setTimeZone(tz);
cal.setTime(pDatum);
cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(pHHMMTP.substring(0, 2)));
cal.set(Calendar.MINUTE, Integer.valueOf(pHHMMTP.substring(2, 4)));
cal.set(Calendar.MILLISECOND, 0);

你看到我的问题了吗?

最佳答案

CET 表示中欧时区。在欧洲,有一个概念Daylight Saving Time .

基本上,在冬天,小时从 1 小时偏移。出于实际原因(实际上是 sleep 质量),时间切换在 Spring 的第一个星期日,即 2016 年 3 月 27 日进行。此外,出于实际原因,时间切换在夜间 02:00 AM 之间完成和 03:00 AM,所以时钟像这样倒计时:01:5801:5903:00 03:01。这意味着,Sun Mar 27 02:48:00 CET 2016 不存在
因此,如果您在 3 月 27 日星期日 运行您的代码,您将得到 03:48 但如果您在 3 月 28 日星期一 运行它,你会得到 02:48

尝试两个日期:

//Date date = new SimpleDateFormat("dd/MM/yyyy z").parse("27/03/2016 CET");
Date date = new SimpleDateFormat("dd/MM/yyyy z").parse("28/03/2016 CET");

Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 2);
cal.set(Calendar.MINUTE, 48);
cal.set(Calendar.MILLISECOND, 0);

System.out.println(cal.getTime());

输出:

Mon Mar 28 02:48:00 CEST 2016

关于java - Calendar.HOUR_OF_DAY 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36155927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com