gpt4 book ai didi

java - SimpleDateFormat 解析的行为是否不同?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:53 25 4
gpt4 key购买 nike

我试图了解 Java 中的日期是如何被解析的,但我似乎仍然无法理解我需要作为参数传入的内容,以便无论我在哪个时区都可以获得一致的输出。

我写了这个测试类:

import java.util.Date;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.text.DateFormat;

public class TimeTest {

public static void main(String [] args) throws Exception
{

String dateString = "2012-03-28 11:45:00 +0200";
String dateString1 = "2012-03-28 11:45:00 +0000";
Timestamp timestamp= null;
Timestamp timestamp1= null;
DateFormat planningDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
Date date = planningDateFormat.parse(dateString);
Date date1 = planningDateFormat.parse(dateString1);
timestamp = new Timestamp(date.getTime());
timestamp1 = new Timestamp(date1.getTime());
System.out.println("Time value passed in was: " + dateString);
System.out.println("Date value after parse: " + date);
System.out.println("Time stamp value is: " + timestamp);

System.out.println("Time value passed in was: " + dateString1);
System.out.println("Date value after parse: " + date1);
System.out.println("Time stamp value is: " + timestamp1);
}
}

给出以下输出:

Time value passed in was: 2012-03-28 11:45:00 +0200
Date value after parse: Wed Mar 28 10:45:00 IST 2012
Time stamp value is: 2012-03-28 10:45:00.0
Time value passed in was: 2012-03-28 11:45:00 +0000
Date value after parse: Wed Mar 28 12:45:00 IST 2012
Time stamp value is: 2012-03-28 12:45:00.0

现在让我解释一下为什么这些都没有任何意义:

在传入的第一个日期中,我传入时间 11:45,偏移量为 +0200,它给我时间 IST,即爱尔兰标准时间 10:45。

任何人都可以向我解释那里发生了什么以及它是如何得出这个结论的吗? 11:45 的时间过去了,是代表 11:45 UTC 还是本地时间 11:45(到偏移量为 +0200 的国家/地区)。在我看来,时间代表本地时间。

另一个问题是:
如果我在爱尔兰,冬天是 +0000,夏天是 +0100。为“Z”传递的值会根据我查询的日期而改变吗?或者 java 不应该根据随时间传递的日期自动知道这一点吗?

我真的不知道发生了什么。

最佳答案

格式模式中的 Z 表示与 UTC 的绝对偏移量。当你说 11:45:00 +0200 时,它等于 09:45:00 UTC 表示的时间;即比 UTC 时间提前 2 小时。由于 IST 是 UTC+1,我们有:

11:45:00 +0200 == 09:45:00 UTC == 10:45:00 IST

如果您使用时区别名(例如,Europe/Dublin)而不是绝对偏移量,Java 将根据您提供的日期部分自动处理夏令时规则。

关于java - SimpleDateFormat 解析的行为是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9942383/

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