gpt4 book ai didi

java - Android 将字符串转换为日期会更改整个日期时间

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:41 25 4
gpt4 key购买 nike

为什么输出不一样?

   Date currentTrueSystemDate = Calendar.getInstance().getTime();
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kuwait"));
String newConvertedDate = sdf.format(currentTrueSystemDate.getTime());
System.out.println(newConvertedDate);
try {
Date newConvertedDate2 = sdf.parse(newConvertedDate);
System.out.println(newConvertedDate2);
} catch (ParseException e) {
System.out.println(e.getLocalizedMessage());
}

输出:

 I/System.out: 27-Sep-2018 09:16:52
I/System.out: Thu Sep 27 07:16:52 GMT+01:00 2018

我将“newConvertedDate”从字符串转换为日期的原因是我想在其上使用 .before.after 函数。我不明白为什么将字符串解析为日期会更改时间?

最佳答案

I don't understand why parsing a string into date changes the time?

format() 将日期(没有时区,它是自 1970-01-01 00:00:00 UTC 以来经过的毫秒数)转换为时区中的字符串表示形式在这种情况下,您指定了科威特。

所以第一次你在科威特时区得到一个字符串并打印它。这只是一个没有时区信息的字符串。但时间是科威特时间。

然后使用 parse() 将字符串转换为日期,假设日期是科威特时间,因为 sdf 实例是相同的。现在这个字符串被转换为日期,System.out.println 将它打印在您本地的时区。

需要注意的是,两个时间相同,只是时区不同。

如果你想要相同的时间,你需要创建一个新的 SimpleDateFormat 实例并将日期字符串传递给它。因此它会假定这是本地时区日期并解析以返回一个日期,该日期在打印时将再次给出相同的值。但是请注意,这个日期与之前的日期不同,只是时间相同。

这样做

Date currentTrueSystemDate = Calendar.getInstance().getTime();
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kuwait"));
String newConvertedDate = sdf.format(currentTrueSystemDate.getTime());
System.out.println(newConvertedDate);
try {
sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
Date newConvertedDate2 = sdf.parse(newConvertedDate);
System.out.println(newConvertedDate2);
} catch (ParseException e) {
System.out.println(e.getLocalizedMessage());
}

关于java - Android 将字符串转换为日期会更改整个日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52543064/

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