gpt4 book ai didi

java - 将 UTC 日期转换为毫秒

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:31 25 4
gpt4 key购买 nike

我对当前 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 不遵守闰秒,因此我们可以将其截断:

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 个字符没问题就盲目继续。

关于java - 将 UTC 日期转换为毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12081417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com