java iso 8601_Java-Android中的ISO 8601字符串到日期/时间对象

Java-Android中的ISO 8601字符串到日期/时间对象

我有一个标准ISO 8601格式的字符串,其中包含从Web服务返回的日期/时间,如下所示:

String dtStart = "2010-10-15T09:27:37Z"

如何将其放入时间或日期之类的对象中? 我最初想以其他格式输出它,但是以后需要用它做其他事情(即可能以其他格式使用)。

干杯

4个解决方案

118 votes

String dtStart = "2010-10-15T09:27:37Z";

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

try {

Date date = format.parse(dtStart);

System.out.println(date);

} catch (ParseException e) {

e.printStackTrace();

}

这就是您要寻找的。 有关于此问题的现有文章。

Seitaridis answered 2020-06-26T16:46:47Z

6 votes

这个问题是在2010年提出的,当时应该正确使用java.time或Joda-Time作为工具。 现在已经有一段时间了。 今天使用

Instant iStart = Instant.parse(dtStart);

是的,就是这么简单。 您的字符串采用ISO 8601格式,并且来自java.time(现代的Java日期和时间API)中的类无需任何显式格式化程序即可解析ISO 8601。 Instant只是那些类中的一种。

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

是的,java.time可以在旧的和更新的Android设备上很好地工作。 它至少需要Java 6。

在Java 8和更高版本以及更新的Android设备(我知道API级别为26)中,内置了现代API。

在Java 6和7中,获取ThreeTen Backport,即新类的backport(JSR 310的ThreeTen;请参见底部的链接)。

在旧版Android上,请使用Android版本的ThreeTen Backport。 称为ThreeTenABP。 并确保使用子包从java.time导入日期和时间类。

链接

Oracle教程:Date Time说明如何使用java.time。

Java Specification Request(JSR)310,其中首先描述了java.time。

ThreeTen Backport项目,即java.time12到Java 6和7(JSR-310的ThreeTen)的反向端口。

ThreeTenABP,ThreeTen Backport的Android版

问题:如何在Android Project中使用ThreeTenABP,并有非常详尽的说明。

维基百科文章:ISO 8601

Ole V.V. answered 2020-06-26T16:48:06Z

2 votes

您可以使用Java的SimpleDateFormat解析方法或使用JodaTime的DateTimeFormat创建DateTimeFormatter并相应地解析为DateTime对象

Jeroen Rosenberg answered 2020-06-26T16:48:26Z

-1 votes

假设您要根据列分隔值计算时间差。

完成-> 15:24:04

开始-> 09:27:37

不使用Date和SimpleDateFormat,我这样做:

String tStart = "09:27:37";

String tFinish = "15:24:04";

String[] sTimeHourMinSec = tStart.split(":");

int sHour = Integer.valueOf(sTimeHourMinSec[0]);

int sMin = Integer.valueOf(sTimeHourMinSec[1]);

int sSec = Integer.valueOf(sTimeHourMinSec[2]);

String[] fTimeHourMinSec = tFinish.split(":");

int fHour = Integer.valueOf(fTimeHourMinSec[0]);

int fMin = Integer.valueOf(fTimeHourMinSec[1]);

int fSec = Integer.valueOf(fTimeHourMinSec[2]);

int diffTotSec = (fHour - sHour) * 3600 + (fMin - sMin) * 60 + (fSec - sSec);

int diffHours = diffTotSec / 3600;

int diffMins = (diffTotSec % 3600) / 60;

int diffSecs = (diffTotSec % 3600) % 60;

System.out.println("Difference: " + diffHours + " h " + diffMins + " m " + diffSecs + " sec");

Sanzhar Askaruly answered 2020-06-26T16:48:59Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值