作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
目前,我的应用中的日期存储为 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 链接,您可以用来玩它。
关于java - 如何将一个时区的本地时间保持为所有时区的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41767528/
我是一名优秀的程序员,十分优秀!