当前位置: 首页 > 面试题库 >

将UTC日期转换为毫秒

奚飞星
2023-03-14
问题内容

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



 类似资料:
  • 问题内容: 我有一个等于日期的字符串,表示为自Unix纪元以来的毫秒数。 我正在尝试将其输出到dmY。 我得到的字符串是“ 1227643821310”,并被告知结果应等于 2-12-2008 ,但我不断得到的结果是 25-11-2008 我的代码如下: 关于为什么会这样的任何想法? 问题答案: 您已经做对了,1227643821根本不是2008年12月12日,的确是2008年11月25日。

  • 问题内容: 假设您网站的用户输入了日期范围。 您需要将此日期发送到服务器进行某些处理,但是服务器希望所有日期和时间都采用UTC。 现在,假设用户位于阿拉斯加,夏威夷或斐济。由于它们所处的时区与UTC完全不同,因此需要将日期范围转换为以下形式: 使用JavaScript Date对象,您如何将第一个“本地化”日期范围转换为服务器可以理解的范围? 问题答案: 该方法返回简化的扩展ISO格式(ISO86

  • 问题内容: 我需要一种简便的方法,可以在不使用任何库的情况下将日期时间戳转换为UTC(从服务器所在的任何时区)。 问题答案: 尝试getTimezone和setTimezone,请参见示例 (但这确实使用了一个类) 更新: 没有任何类,您可以尝试这样的事情: 注意:您可能还需要将时区设置回原始

  • 问题内容: 我需要有关此java方法的一些建议。此方法的目的是采用表示日期的字符串-该字符串是从EST时区中的日期创建的-并将其转换为UTC时区中的java Date对象。 我看到的问题是dt的值似乎已关闭。例如,如果dateString为‘10 / 16/2012 12:06 PM’-我期望dt(以UTC为单位)的值类似于“ 2012年10月16日,星期二,下午4:06”。取而代之的是,dt的值

  • 问题内容: 该java.util.Date 方法显示当地时区的日期。 在几种常见的情况下,我们希望以UTC格式打印数据,包括日志,数据导出以及与外部程序的通信。 在UTC中创建String表示形式的最佳方法是什么? 如何用更好的格式替换无法排序的juDate 格式(感谢@JonSkeet!)? 附录 我认为以自定义格式和时区打印日期的标准方法非常繁琐: 我一直在寻找像这样的单线: 问题答案: 遵循