将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 TimeUnit

long 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

回到顶部