在我的项目中,我得到了json格式的API响应.我得到一个UTC时间格式的字符串值,如下所示Jul 16, 2013 12:08:59 AM
.
我需要将其更改为本地时间.这就是我们使用此应用程序需要显示当地时间的地方.我该怎么做?
这是我尝试过的一些代码:
String aDate = getValue("dateTime", aEventJson);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss z");
simpleDateFormat.setTimeZone(TimeZone.getDefault());
String formattedDate = simpleDateFormat.format(aDate);
Run Code Online (Sandbox Code Playgroud)
假设aDate包含 Jul 16, 2013 12:08:59 AM
dev*_*ole 79
这是我的尝试:
String dateStr = "Jul 16, 2013 12:08:59 AM";
SimpleDateFormat df = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a", Locale.ENGLISH);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = df.parse(dateStr);
df.setTimeZone(TimeZone.getDefault());
String formattedDate = df.format(date);
Run Code Online (Sandbox Code Playgroud)
还要注意am/pm标记的"a"...
我想提出现代的答案.虽然SimpleDateFormat
是2013年我们用于解析和格式化日期时间的类(除了Joda-Time),但它现在已经过时了,而且我们在java.time
JSR-310或现代Java日期和时间API 方面做得更好了.2014年推出Java 8.
但我听说大多数Android设备仍然没有运行Java 8.幸运的是,您仍然可以通过ThreeTenABP(JSR-310到Android Java 7的后端)使用现代Java日期和时间API.详细信息如下:如何在Android项目中使用ThreeTenABP.
现在的代码是:
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("MMM dd, uuuu hh:mm:ss a", Locale.ENGLISH);
String aDate = "Jul 16, 2013 12:08:59 AM";
String formattedDate = LocalDateTime.parse(aDate, formatter)
.atOffset(ZoneOffset.UTC)
.atZoneSameInstant(ZoneId.systemDefault())
.format(formatter);
System.out.println(formattedDate);
Run Code Online (Sandbox Code Playgroud)
由于我的计算机正在运行欧洲/哥本哈根时区,该时区在7月比UTC早2小时,因此打印出来
Jul 16, 2013 02:08:59 AM
Run Code Online (Sandbox Code Playgroud)
更多要点:
h
格式化模式字符串中的小写.大写H
是从0到23的小时.SimpleDateFormat
或DateTimeFormatter
).如果没有给出语言环境,格式化程序将使用设备的默认语言环境."Jul"和"AM"是英文的,你的代码可以很好地运行在许多设备上,直到有一天它运行在具有非英语语言环境和崩溃的设备上,你很难搞清楚原因.ZoneId.of("Asia/Kolkata")
.JVM的默认时区可能会被程序的其他部分或在同一JVM中运行的其他程序更改,因此不可靠.1.本地到UTC转换器
public static String localToUTC(String dateFormat, String datesToConvert) {
String dateToReturn = datesToConvert;
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
sdf.setTimeZone(TimeZone.getDefault());
Date gmt = null;
SimpleDateFormat sdfOutPutToSend = new SimpleDateFormat(dateFormat);
sdfOutPutToSend.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
gmt = sdf.parse(datesToConvert);
dateToReturn = sdfOutPutToSend.format(gmt);
} catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn;
}
Run Code Online (Sandbox Code Playgroud)
2. UTC 到本地转换器
public static String uTCToLocal(String dateFormatInPut, String dateFomratOutPut, String datesToConvert) {
String dateToReturn = datesToConvert;
SimpleDateFormat sdf = new SimpleDateFormat(dateFormatInPut);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date gmt = null;
SimpleDateFormat sdfOutPutToSend = new SimpleDateFormat(dateFomratOutPut);
sdfOutPutToSend.setTimeZone(TimeZone.getDefault());
try {
gmt = sdf.parse(datesToConvert);
dateToReturn = sdfOutPutToSend.format(gmt);
} catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn; }
Run Code Online (Sandbox Code Playgroud)
//your UTC time var
long time = UTCtime;
//convert it
Time timeFormat = new Time();
timeFormat.set(time+TimeZone.getDefault().getOffset(time));
//use the value
long localTime = timeFormat.toMillis(true);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38815 次 |
最近记录: |