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

将UTC日期转换为毫秒

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

将UTC日期转换为毫秒

编辑:我错过了“忽略一天中的时间”部分。它现在存在,但是快要结束了…

最简单的方法可能是使用

SimpleDateFormat
,并适当设置了时区:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);format.setTimeZone(TimeZone.getTimeZone("UTC"));Date date = format.parse(text);long millis = date.getTime();

(设置时区在这里很重要,否则,它将把值解释为 本地 时区。)

另外,如果您要做的事情不那么简单,请使用Joda Time,它是更好的日期/时间API。特别

SimpleDateFormat
是不是
线程安全的,
DateTimeFormatter
而是:

// This can be reused freely across threads after construction.DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")    .withLocale(Locale.US)    .withZoneUTC();// Option 1DateTime datetime = formatter.parseDateTime(text);long millis = dateTime.getMillis();// Option 2, more direct, but harder to diagnose errorslong millis = formatter.parseMillis(text);

到目前为止,我们已经解析了整个Caboodle。忽略日期部分的最简单方法是四舍五入-毕竟,Java没有观察到observe秒,因此我们可以截断它:

long millisPerDay = 24L * 60L * 60L * 1000L; // Or use TimeUnitlong dayMillis = (millis / millisPerDay) * millisPerDay;

那将“四舍五入到1970年”,因此,如果您有一个1970年 之前 的日期,它将四舍五入到一天的 尽头 -但我怀疑这不太可能成为问题。

对于Joda Time版本,您可以改用以下代码:

DateTime dateTime = formatter.parseDateTime(text);long millis = dateTime.toLocalDate().getLocalMillis();

我个人 不会 只接受一个子字符串的想法。即使您实际上对 保留 时/分/秒不感兴趣,我认为还是应该解析给出的信息 然后
丢弃信息。除了其他方面,它还会使您的代码因数据错误而相应地失败,例如

"2012-06-100"

要么

"2012-06-14 25:01:25"

指出在提供数据方面存在问题,因此最好不要仅仅因为前10个字符就可以盲目地继续下去,而是找出它。



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

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

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