时间戳(精确到毫秒)转yyyy-mm-dd hh:mm:ss
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间戳(精确到毫秒)转yyyy-mm-dd hh:mm:ss相关的知识,希望对你有一定的参考价值。
参考技术A 时间戳(精确到毫秒)转yyyy-mm-dd hh:mm:ss精确到毫秒、如果没有到毫秒就 date.setTime(timeStamp*1000);
如何将毫秒更改为 yyyy-MM-dd HH:mm:ss 格式的日期对象 [重复]
【中文标题】如何将毫秒更改为 yyyy-MM-dd HH:mm:ss 格式的日期对象 [重复]【英文标题】:How to change miillisecond to Date Object in yyyy-MM-dd HH:mm:ss format [duplicate] 【发布时间】:2017-11-14 01:10:54 【问题描述】:如何将毫秒更改为 yyyy-MM-dd HH:mm:ss 格式的 Date 对象,如 2017-04-12 23:14:52?
【问题讨论】:
请提供输入毫秒数? 你明白Date
对象没有格式吗?请阅读codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date
希望这个回答对你有帮助***.com/questions/4142313/…
你试过什么?你问之前搜索过吗? 非常有趣,如果没有任何有用和有用的东西出现。它肯定已经在那里了,你可以比任何人在这里再次输入它更快地找到它。
我也同意你的观点,@Tim,这似乎有两个问题:(1)如何将自纪元以来的毫秒转换为日期(或日期时间)对象(2 ) 如何格式化所述对象。 两者之前都被问过很多次。
【参考方案1】:
你可以试试这个示例代码。
public class MillDateConverter
public static String dFormat = "yyy-MM-dd HH:mm:ss";
private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dFormat);
public static void main(String[] args)
Calendar calendar = Calendar.getInstance();
long milliSec=Long.parseLong("1086073200000");
System.out.println(milliSec);
calendar.setTimeInMillis(milliSec);
System.out.println(simpleDateFormat.format(calendar.getTime()));
【讨论】:
通过这样做我会得到 String simpleDateFormat.format(calendar.getTime()) 返回 String 但我想要 java.utill.Date 对象。我在得到字符串后尝试做 simpleDateFormat.format(calendar.getTime())) 但后来我得到了 Tue Apr 25 23:52:17 IST 2017 格式,这是我不想要的 你问的是不可能的,或者更确切地说,是自相矛盾的,@NilenduKumar。java.util.Date
对象没有也不能有格式。这是一个时间点,仅此而已。【参考方案2】:
你不能那样做。有几个原因。
TL;DR:不要使用Date
,使用Instant
。这些都不能有格式。格式化成字符串取决于时区,所以需要选择时区。
首先,我从讨论中了解到,您要求使用格式为 yyyy-MM-dd HH:mm:ss
的 java.util.Date
对象。 Date
对象中没有也不能有格式。您应该在这里尝试理解的是数据本身与向用户呈现数据之间的区别。 int
可能保存值 25389,但它不保存格式 25389(实际上内部表示与 25389 完全不同)。相同的int
可以作为 25389、000025389、25,389 或 +25389 呈现给用户,这只是众多可能性中的一小部分。格式化发生在int
之外,而int
保持不变。
同样,Date
对象包含一个时间点。相同的日期可以格式化为例如 2017-04-12 23:14:52 或 April 12, 2017 11:14:52 PM。它甚至可以针对不同的时区进行格式化,如果系统有不同时区的用户,这将是一个好主意。或者,我们可以向用户显示日历叶和/或显示时间的时钟。同样,格式化发生在 Date
之外,而 Date
保持不变。
详细说明时区问题,由相同毫秒值表示的相同时间点可以格式化为 UTC 中的 2017-04-12 17:44:52,我的 2017-04-12 19:44:52时区,亚洲/加尔各答时区的 2017-04-12 23:14:52 甚至太平洋/奥克兰时区的 2017-04-13 05:44:52。请注意,在最后一种情况下,甚至日期都不相同。因此,将毫秒更改为您要求的格式的方法不止一种。我们需要知道您想要哪个时区才能为您提供帮助。
所以我相信你需要的不是一件事,而是两件事
-
一种在程序中存储时间点的方法。
一种为某个时区的用户将时间点格式化为 yyyy-MM-dd HH:mm:ss 格式的字符串的方法。
要存储您的时间点,请使用任一
long
表示您已有的毫秒值
java.time.Instant
对象。
为什么我没有提到java.util.Date
?因为这个类已经过时了。它的设计很快就变得很麻烦。他们试图通过弃用大多数方法并引入java.util.Calendar
来修复它,但这也效果不佳。最后,他们借鉴了一个名为 Joda-Time 的库的经验,于 2014 年在 Java 8 中引入了java.time
类。那是三年前的事了。所以恕我直言,我们现在应该把Date
和朋友扔到一边,开始使用更新的类。所以更喜欢Instant
而不是Date
。
将毫秒更改为 Instant
很简单:
long milliseconds = 1492019092000L;
Instant pointInTime = Instant.ofEpochMilli(milliseconds);
正如我所说,为了将您的即时格式化为用户的字符串,我们需要一个时区。然后做
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
String formattedDateTimeString = pointInTime.atZone(ZoneId.of("Asia/Kolkata"))
.format(formatter);
所以您需要填写我输入ZoneId.of("Asia/Kolkata")
的所需时区。如果要使用JVM当前的时区设置,只需填写ZoneId.systemDefault()
即可。但请注意,时区设置可能会被更改,即使是在同一 JVM 中运行的不相关程序也是如此,因此依赖它可能会很脆弱。
上面代码sn-p的结果是一个类似的字符串
2017-04-12 23:14:52
PS 如果看完上面的内容你真的坚持,下面是如何从上面得到java.util.Date
:
Date myOutdatedDateInstance = Date.from(pointInTime);
(请原谅我重复一遍,它仍然没有所需的格式,这是不可能的)。
【讨论】:
以上是关于时间戳(精确到毫秒)转yyyy-mm-dd hh:mm:ss的主要内容,如果未能解决你的问题,请参考以下文章
hive 中怎么unix时间戳转化为"yyyy-mm-dd hh:mm:ss
跪求啊 时间戳在jsp页面上怎么转换为yyyy-MM-dd HH:mm:ss
时间戳格式 dd/mm/yyyy hh:mm:ss 到 yyyy-mm-dd hh:mm:ss - MySQL [重复]