gpt4 book ai didi

java - 如何将一个时区的本地时间保持为所有时区的时间?

转载 作者:太空狗 更新时间:2023-10-29 13:53:57 25 4
gpt4 key购买 nike

目前,我的应用中的日期存储为 ISO 日期 2016-08-26T11:03:39.000+01:00

如果用户在 11:03:39 在英国参加了一个 Activity ,那么此时在美国佛罗里达州显示 06:03:39 就没有意义了。这目前正在我的应用程序中发生。

无论事件发生在何处以及用户身在何处,如何将 ISO 日期转换回事件在本地发生的时间?

下面是我目前正在使用的代码。

DateFormat isoDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
DateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy");
DateFormat timeFormat = new SimpleDateFormat("hh:mm a");
mDate = isoDateFormat.parse(isoDateString);
dateString = dateFormat.format(mDate);
timeString = timeFormat.format(mDate);

最佳答案

您可以像这样从 ISO 字符串获取偏移量并从中获取时区来做到这一点。

import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.TimeZone;
import java.util.Date;

class Main {
public static void main(String[] args) {
DateFormat isoDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
//DateFormat isoDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); I needed to use XXX in repl.
DateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy");
DateFormat timeFormat = new SimpleDateFormat("hh:mm a");
try
{
String isoString = "2016-08-26T11:03:39.000+01:00";
Date mDate = isoDateFormat.parse(isoString);
System.out.println("GMT" + isoString.substring(23));
TimeZone mTimeZone = TimeZone.getTimeZone("GMT" + isoString.substring(23));
dateFormat.setTimeZone(mTimeZone);
timeFormat.setTimeZone(mTimeZone);
System.out.println(mTimeZone.toString());
String dateString = dateFormat.format(mDate);
String timeString = timeFormat.format(mDate);
System.out.println(dateString + " " + timeString);
}
catch(ParseException e)
{
System.out.println("Error");
}
}
}

这是一个 repl 链接,您可以用来玩它。

https://repl.it/FPrN/2

关于java - 如何将一个时区的本地时间保持为所有时区的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41767528/

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