Java 如何以yyyy-MM-dd HH:MM:ss格式将毫秒更改为日期对象
如何将毫秒更改为yyyy-MM-dd HH:MM:ss格式的日期对象,如2017-04-12 23:14:52?您可以尝试此示例代码Java 如何以yyyy-MM-dd HH:MM:ss格式将毫秒更改为日期对象,java,datetime-format,epoch,milliseconds,Java,Datetime Format,Epoch,Milliseconds,如何将毫秒更改为yyyy-MM-dd HH:MM:ss格式的日期对象,如2017-04-12 23:14:52?您可以尝试此示例代码 public class MillDateConverter { public static String dFormat = "yyy-MM-dd HH:mm:ss"; private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dFormat);
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()));
}
}
你不能那样做。有几个原因 TL;DR:不要使用
日期
,使用即时
。这两种格式中都不能包含格式。格式化为字符串取决于时区,因此需要选择时区
首先,我从讨论中了解到,您需要一个java.util.Date
对象,其格式为yyyy-MM-dd HH:MM:ss
。Date
对象没有格式,也不能有格式。这里您应该尝试理解的是数据本身和向用户呈现数据之间的区别。int
可以保存值25389,但它的格式不是25389(实际上内部表示与25389有很大不同)。相同的int
可能以25389、000025389、25389或+25389的形式呈现给用户,这只是众多可能性中的几个。格式化发生在int
之外,而int
保持不变
类似地,Date
对象保存一个时间点。同一日期可以格式化为2017-04-12 23:14:52或2017年4月12日11:14:52 PM。它甚至可以针对不同的时区进行格式化,如果系统的用户位于不同的时区,这将是一个好主意。或者,我们可以向用户显示日历页和/或显示时间的时钟。同样,格式化发生在日期
之外,而日期
保持不变
详细说明时区问题,由相同毫秒值表示的相同时间点可以格式化为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。请注意,在最后一种情况下,甚至日期都不相同。因此,将毫秒更改为您要求的格式并不是唯一的方法。在我们帮助您之前,我们需要知道您想要它的时区
所以我相信你需要的不是一件事,而是两件事
- 一个
表示您已有的毫秒值long
- 一个
对象java.time.Instant
java.util.Date
?因为这门课已经过时很久了。它的设计很快就变得很麻烦。他们试图通过弃用大多数方法并引入java.util.Calendar
来修复它,但这也没有起到很好的作用。最后,他们借鉴了Joda Time库的经验,于2014年在Java8中引入了java.Time
类。那是三年前的事了,从写作到计数。因此,我想我们现在应该把Date
和friends扔到海里,开始使用更新的类。因此,比起日期,你更喜欢即时的
将毫秒更改为即时
非常简单:
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
。如果要使用JVM的当前时区设置,只需填写ZoneId.systemDefault()
。但是要注意,时区设置可能会被更改,即使是由运行在同一JVM中的无关程序更改,因此依赖它可能是脆弱的
上述代码片段的结果是一个类似
2017-04-12 23:14:52
PS如果在阅读了上面的内容后,您确实坚持要这样做,那么下面是如何从上面获得java.util.Date
:
Date myOutdatedDateInstance = Date.from(pointInTime);
(请原谅我重复,它仍然没有所需的格式,这是不可能的)。请提供输入毫秒数?您是否理解
日期
对象没有格式?请阅读我希望这个答案能帮助你你尝试过什么?你问之前搜索过吗?如果没有发现有用的东西,那就很有趣了。我也同意你的观点,@Tim,在这一点上似乎有两个问题:(1)如何将历元以来的毫秒转换为日期(或日期时间)对象(2)如何格式化所述对象。这两个问题以前都被问过很多次并回答过很多次。通过这样做,我将得到字符串SimpleDataFormat.format(calendar.getTime())返回字符串,但我需要java.utill.Date对象。在得到字符串后,我尝试过使用SimpleDataFormat.format(calendar.getTime()),但之后我得到的是2017年4月25日星期二23:52:17的IST格式,我不希望你问的是不可能的,或者更确切地说,是自相矛盾的@NilenduKumar。java.util.Date
对象没有并且不能包含格式。这是一个时间点,仅此而已。