目前,我的应用中的日期存储为ISO日期2016-08-26T11:03:39.000+01:00
。
如果用户在英国的11:03:39参加了一个活动,那么这次在美国佛罗里达州以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);
答案 0 :(得分:1)
您可以通过从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链接。