栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法在Android上将字符串转换为日期

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法在Android上将字符串转换为日期

你不需要

您要求的转换很容易是多余的。您要输入类似的字符串

2017-04-23T19:47:39-0000
。此字符串为ISO
8601格式(国际标准格式)。因此,根据您的实际情况,我希望ISO
8601中的字符串适合您。您已经获得的字符串
2017-04-23T19:47:39+00:00
也在ISO
8601中!该标准允许一些变化,其中之一是偏移量中的冒号是可选的。因此,我认为您应该做的第一件事是传递所获得的字符串,看看是否可行。如果没有,请继续阅读。

java.time

使用现代的Java日期和时间API,您所需的转换 非常 顺利

java.time

    DateTimeFormatter formatterWithoutcolon  = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssxx");    String createdAtString = "2017-04-23T19:47:39+00:00";    OffsetDateTime dateTime = OffsetDateTime.parse(createdAtString);    String inDesiredFormat = dateTime.format(formatterWithoutcolon);    System.out.println(inDesiredFormat);

这将打印所需的内容:

2017-04-23T19:47:39 + 0000

请注意,我们甚至不需要格式化程序来解析字符串。

OffsetDateTime
以及将
java.time
ISO
8601解析为默认值的许多其他类。由于我们对结果的要求更加精确,因此我们在这里使用格式化程序。
xx
例如,为我们提供了不带冒号的偏移量
+0000

Date
您使用的类已经过时了。也是
SimpleDateFormat
,而且也很麻烦。我建议您避免使用这些课程。

问题:我可以在Android上使用java.time吗?

是的,

java.time
在较新和较旧的Android设备上均可正常运行。它至少需要Java 6

  • 在Java 8和更高版本以及更新的Android设备中(有人告诉我,从API级别26开始),内置了现代API。
  • 在Java 6和7中,获取ThreeTen反向端口,即新类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在旧版Android上,请使用Android版本的ThreeTen Backport。它称为ThreeTenABP。并确保您导入
    org.threeten.bp
    带有子包的日期和时间类。

骇客

您所需的更改非常简单,只需要删除一个冒号即可。因此,另一个不需要ThreeTenABP的但不是基本但简单的解决方案是正则表达式:

    String inDesiredFormat = createdAtString.replaceFirst("([+-]\d{2}):(\d{2})$", "$1$2");

得出与上述相同的结果。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451729.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号