2017-06-12 34 views
-11

如何将yyyy-MM-dd HH:mm:ss格式的毫秒更改为Date对象2017-04-12 23:14 :52?如何将yily-MM-dd HH:mm:ss格式的miillisecond更改为Date对象

+0

请提供输入毫秒? –

+6

你知道'Date'对象没有格式吗?请阅读https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/ –

+0

我希望这个答案能帮助你https://stackoverflow.com/questions/4142313/java-转换为毫秒至时间格式 –

回答

0

你可以试试这个示例代码。

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())); 

    } 

} 
+0

通过这样做,我会得到字符串simpleDateFormat.format(calendar.getTime())返回字符串,但我想java.utill.Date对象。我试图做simpleDateFormat.format(calendar.getTime()))后得到的字符串,但然后我得到星期二25 25:23:17 IST 2017格式,我不想要 –

+0

你在问不可能,或者可能是,自相矛盾的@NilenduKumar。一个'java.util.Date'对象没有得到,也没有格式。这只是一个时间点,没有其他。 –

2

你不能那样做。出于几个原因。

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。请注意,在最后一种情况下,即使日期不变。因此,不仅有一种方法可以将您的毫秒数转换为您要求的格式。在我们可以帮助您之前,我们需要知道您想要的时区。

因此,我认为你需要的是不是一回事,而是两个

  1. 存储在你的时间点在你的程序的方法。
  2. 一种将时间点格式化为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); 

(并请原谅我重复,它仍然没有所需的格式,这是不可能的)。

相关问题