将UTC日期转换为毫秒
我对当前UTC时间以毫秒为单位不感兴趣,也无需弄乱时区。我的原始日期已经存储为UTC时间戳。
我在UTC时间“ 2012-06-14
05:01:25”中存储了一个日期。我对日期时间不感兴趣,但对日期部分感兴趣。因此,在用Java检索日期并排除小时,分钟和秒之后,我剩下的是“
2012-06-14”。
如何将其转换为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 1
DateTime datetime = formatter.parseDateTime(text);
long millis = dateTime.getMillis();
// Option 2, more direct, but harder to diagnose errors
long 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个字符就可以盲目地继续下去,而是找出它。
以上是 将UTC日期转换为毫秒 的全部内容, 来源链接: utcz.com/qa/428640.html