首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android中将yyyy-mm-dd‘T’in :mm:ss.SSSXXX日期格式解析为simple?

如何在Android中将yyyy-mm-dd‘T’in :mm:ss.SSSXXX日期格式解析为simple?
EN

Stack Overflow用户
提问于 2018-05-16 18:29:50
回答 3查看 27.6K关注 0票数 0

如何在Android中将此日期2018-01-09T11:11:02.0+03:00解析为dd.MM.yyyy hh:mm格式?

0911之间的T是什么意思?谢谢。

我不知道后端开发人员是怎么得到这种格式的。我使用的是Java。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-16 18:48:03

如果您使用的是java,则可以将SimpeDateFormat与模式一起使用:

代码语言:javascript
复制
        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,我们可以这样做

代码语言:javascript
复制
    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);
票数 2
EN

Stack Overflow用户

发布于 2018-05-16 18:39:08

您可以使用SimpleDateFormat来实现这一点。

下面是一个用Java编写的经过测试的示例:

代码语言:javascript
复制
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编写的经过测试的示例

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2018-05-17 14:32:45

代码语言:javascript
复制
    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,这就是为什么我们不需要任何格式化程序进行解析的原因。OffsetDateTimeDateTimeFormatter是来自现代Java date and time API java.time的类。

问:我可以在安卓系统上使用java.time吗?

是的,java.time在旧的和新的安卓设备上都能很好地工作。它只需要至少Java 6即可。

在Java8和更高版本以及更新的安卓设备(API26级以上)上的

  • 内置了现代的API。Java6和7中的
  • 获得了ThreeTen后端口,这是新类的后端口(JSR310的ThreeTen;请参阅底部的链接)。(较老的)安卓系统上的
  • 使用的是ThreeTen后端口的安卓版本。它被称为ThreeTenABP。并确保使用子包从org.threeten.bp导入date和time类(我的代码使用这些导入进行了测试)。

链接

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50368493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档