如何将yily-MM-dd HH:mm:ss格式的miillisecond更改为Date对象
如何将yyyy-MM-dd HH:mm:ss格式的毫秒更改为Date对象2017-04-12 23:14 :52?如何将yily-MM-dd HH:mm:ss格式的miillisecond更改为Date对象
你可以试试这个示例代码。
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()));
}
}
通过这样做,我会得到字符串simpleDateFormat.format(calendar.getTime())返回字符串,但我想java.utill.Date对象。我试图做simpleDateFormat.format(calendar.getTime()))后得到的字符串,但然后我得到星期二25 25:23:17 IST 2017格式,我不想要 –
你在问不可能,或者可能是,自相矛盾的@NilenduKumar。一个'java.util.Date'对象没有得到,也没有格式。这只是一个时间点,没有其他。 –
你不能那样做。出于几个原因。
TL; DR:请勿使用Date
,请使用Instant
。这些都不能有格式。格式化为字符串取决于时区,因此您需要选择时区。
首先,我从讨论中了解到您所要求的java.util.Date
对象的格式为yyyy-MM-dd HH:mm:ss
。 A Date
对象不具有格式,也不能具有格式。这里应该尝试理解的是数据本身和向用户呈现数据的区别。 int
可以保存值25389,但它不以格式25389保存(实际上内部表示与25389完全不同)。可以将相同的int
作为25389,0000025389,25389或+25389呈现给用户,仅仅提到了许多可能性中的几个。格式化发生在int
之外,而int
保持不变。
同样,一个Date
对象有一个时间点。相同的日期可能会被格式化为例如2017-04-12 23:14:52或2017年4月12日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中运行的不相关程序也是如此,所以依赖此可能会很脆弱。
上面的代码片段的结果是一样
2017-04-12 23:14:52
PS字符串如果看完上面你真的坚持,这里是如何从上面的一个java.util.Date
:
Date myOutdatedDateInstance = Date.from(pointInTime);
(并请原谅我重复,它仍然没有所需的格式,这是不可能的)。
请提供输入毫秒? –
你知道'Date'对象没有格式吗?请阅读https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/ –
我希望这个答案能帮助你https://stackoverflow.com/questions/4142313/java-转换为毫秒至时间格式 –