我正在以“ 10:30:00.000Z”格式获取时间字段值。 我想将其转换为10:30 AM / PM格式。我正在尝试使用SimpleDateFormat并对它进行解析,但是我正在获取java.text.ParseException。有人可以帮我吗?
treatmentObject.getTime()的值=“ 10:30:00.000Z”
'''
if (treatmentObject.getTIME1() != null) {
System.out.println("Treatment time is"+treatmentObject.getTIME1());
time1 = toISO8601UTC(fromISO8601UTC(treatmentObject.getTIME1()));
System.out.println("Time1 is" + time1);
}
public static String toISO8601UTC(Date date) {
System.out.println("date is::" + date);
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("HH:mm:ss.SSSZZZZZ");
df.setTimeZone(tz);
System.out.println("String date is::" + df.format(date));
return df.format(date);
}
public static Date fromISO8601UTC(String dateStr) {
System.out.println("dateStr is::" + dateStr);
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("hh:mm a");
df.setTimeZone(tz);
try {
System.out.println("parse dateStr is::" + df.parse(dateStr));
return df.parse(dateStr);
} catch (ParseException e) {
System.out.println("Inside catch exception");
e.printStackTrace();
}
return null;
}
'''
答案 0 :(得分:1)
String treatmentTimeString = "20:01:00.000Z";
DateTimeFormatter timeFormatter
= DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)
.withLocale(Locale.US);
OffsetTime treatmentTime = OffsetTime.parse(treatmentTimeString);
OffsetTime timeInUtc = treatmentTime.withOffsetSameInstant(ZoneOffset.UTC);
String formattedTime = timeInUtc.format(timeFormatter);
System.out.println("Treatment time: " + formattedTime);
此代码段的输出为:
治疗时间:晚上8:01
我正在使用java.time(现代Java日期和时间API)。我进一步利用了一个事实,即您的时间字符串符合ISO 8601,java.time类将其解析(并打印)为默认格式的标准格式,即没有任何显式格式化程序。对于格式化,我使用的是Java内置的本地化格式。这样,我自己就无需编写任何格式模式字符串,否则这总是容易出错的任务。
我正在将解析的时间转换为UTC。在示例中,这不是必需的,因为示例字符串中的Z
表示它已经在UTC中。无论如何,如果有一天获得的时间字符串具有不同的偏移量,则可以确保您也将获得正确的UTC时间。
它给出了预期的输出,但是问题是,它可以与 最低API级别26。我的最低api级别21.那么有什么解决方法?
是的,当然,java.time在旧的和更新的Android设备上都能很好地工作。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。似乎您交换了原来的格式和想要的格式。您有20:01:00.000Z
,并尝试使用格式为hh:mm a
的格式化程序对其进行解析。这显然失败了,但您报告了异常。之后,您尝试格式化Date
,这是您期望使用格式为HH:mm:ss.SSSZZZZZ
的格式化程序进行解析所得到的。如果到此为止,您会发现它为您提供20:01:00.000+0000
,而不是10:30 AM / PM格式。
java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。