将UTC日期转换为毫秒

将UTC日期转换为毫秒,第1张

将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个字符就可以盲目地继续下去,而是找出它。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5439198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存