如何在Android中将此日期2018-01-09T11:11:02.0+03:00解析为dd.MM.yyyy hh:mm格式?
09和11之间的T是什么意思?谢谢。
我不知道后端开发人员是怎么得到这种格式的。我使用的是Java。
发布于 2018-05-16 18:48:03
如果您使用的是java,则可以将SimpeDateFormat与模式一起使用:
String date = "2018-01-09T11:11:02.0+03:00";
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
SimpleDateFormat output = new SimpleDateFormat("dd.MM.yyyy hh:mm");
Date d = null;
try {
d = dateformat.parse(date /*your date as String*/);
} catch (ParseException e) {
e.printStackTrace();
}
String formattedDate = output.format(d);
Log.d("Date format", "output date :" + formattedDate);输出为:
D/日期格式:输出日期:09.01.2018 09:11
编辑:感谢@OleV.V.,对于API > 26,或者使用我们可以使用的ThreeTenABP
DateTimeFormatter,我们可以这样做
String date = "2018-01-09T11:11:02.0+03:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
DateTimeFormatter formatterOut = DateTimeFormatter.ofPattern("dd.MM.yyyy hh:mm");
LocalDate parsedDate = LocalDate.parse(date, formatter);
String formattedDate = formatterOut.format(parsedDate);
Log.d("Date format", "output date :" + formattedDate);发布于 2018-05-16 18:39:08
您可以使用SimpleDateFormat来实现这一点。
下面是一个用Java编写的经过测试的示例:
String dateString = "2018-01-09T11:11:02.0+03:00";
String inPattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
String outPattern = "dd.MM.yyyy hh:mm";
SimpleDateFormat inFormat = new SimpleDateFormat(inPattern, Locale.getDefault());
SimpleDateFormat outFormat = new SimpleDateFormat(outPattern, Locale.getDefault());
try {
Date inDate = inFormat.parse(dateString);
String outDate = outFormat.format(inDate);
Log.e("TEST", outDate);
} catch (ParseException e) {
e.printStackTrace();
}下面是一个用Kotlin编写的经过测试的示例
val dateString = "2018-01-09T11:11:02.0+03:00"
val inPattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
val outPattern = "dd.MM.yyyy hh:mm"
val inFormat = SimpleDateFormat(inPattern, Locale.getDefault())
val outFormat = SimpleDateFormat(outPattern, Locale.getDefault())
val inDate = inFormat.parse(dateString)
val outDate = outFormat.format(inDate)
Log.e("TEST", outDate)发布于 2018-05-17 14:32:45
DateTimeFormatter desiredFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
String backendDateTimeString = "2018-01-09T11:11:02.0+03:00";
OffsetDateTime dateTime = OffsetDateTime.parse(backendDateTimeString);
String presentationDateTimeString = dateTime.format(desiredFormatter);
System.out.println(presentationDateTimeString);这将打印:
09.01.2018 11:11
请注意:我在格式模式字符串中使用大写HH。这表示一天中从00到23的小时。在问题中,您使用了小写的hh,在格式模式字符串中,它表示小时,AM或PM从01到12,因此00:33将显示为12:33,15:47将显示为03:47。我以为你不是故意的。
你的后端开发人员得到的格式是2018-01-09T11:11:02.0+03:00,是ISO8601。这很普遍,而且是国际标准,所以他/她能做到这一点是件好事。中间有趣的T表示时间部分的开始,将其与日期部分分开。单参数OffsetDateTime.parse方法可以解析ISO8601,这就是为什么我们不需要任何格式化程序进行解析的原因。OffsetDateTime和DateTimeFormatter是来自现代Java date and time API java.time的类。
问:我可以在安卓系统上使用java.time吗?
是的,java.time在旧的和新的安卓设备上都能很好地工作。它只需要至少Java 6即可。
在Java8和更高版本以及更新的安卓设备(API26级以上)上的
org.threeten.bp导入date和time类(我的代码使用这些导入进行了测试)。链接
java.time.的java.time安卓版本的java.time的ThreeTen
https://stackoverflow.com/questions/50368493
复制相似问题