因此,我的应用程序从服务器的JSON文件中获取信息,其中有一些日期/时间值。时间和日期以UTC为单位。我需要在用户本地时区的应用程序中显示这些内容。
JSON数据示例:
"start":"2018-10-20 03:00:00","finish":"2018-10-20 05:00:00"
到目前为止,我的代码以UTC格式显示日期和时间。
val dateStringStart = radioScheduleDMList.get(position).start
val dateStringEnd = radioScheduleDMList.get(position).finish
val date = SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefault()).parse(dateStringStart)
val dateEnd = SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefault()).parse(dateStringEnd)
val day = SimpleDateFormat("d MMM").format(date)
val startDate = SimpleDateFormat("ha").format(date)
val endDate = SimpleDateFormat("ha").format(dateEnd)
如何使用设备时区显示此数据?我已经搜寻了几个小时。
使用上面的示例,我的应用显示日期为“ 20 OCT”,显示时间为“ 3 AM-5AM”。以我为例,我居住在澳大利亚(GMT + 10),所以我希望当天是“ OCT 20”和“ PM 1 PM-3PM”。简而言之,我想检测用户与UTC的时区偏移并将其应用于显示。
答案 0 :(得分:0)
DateTimeFormatter jsonFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("d MMM", Locale.forLanguageTag("en-AU"));
DateTimeFormatter hourFormatter
= DateTimeFormatter.ofPattern("ha", Locale.forLanguageTag("en-AU"));
ZoneId zone = ZoneId.systemDefault();
String dateStringStart = "2018-10-20 03:00:00";
OffsetDateTime startDateTime = LocalDateTime.parse(dateStringStart, jsonFormatter)
.atOffset(ZoneOffset.UTC);
ZonedDateTime userStartDateTime = startDateTime.atZoneSameInstant(zone);
String startDayString = userStartDateTime.format(dateFormatter);
String startTimeString = userStartDateTime.format(hourFormatter);
System.out.println("Start day: " + startDayString);
System.out.println("Start hour: " + startTimeString);
对不起,我没有写Kotlin。您可以自己从Java转换吗?当我在默认时区为Australia / Brisbane的JVM上运行以上代码时,输出:
Start day: 20 Oct Start hour: 1PM
在结束日期和时间上也要做类似的事情。
是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。