将unix时间戳转换为java中的日期

时间:2013-07-02 18:07:12

标签: java unix-timestamp

如何在Unix中将分钟从unix时间戳转换为日期和时间。例如,时间戳1372339860对应Thu, 27 Jun 2013 13:31:00 GMT

我想将1372339860转换为2013-06-27 13:31:00 GMT

编辑:其实我希望它是根据美国时间GMT-4,所以它将是2013-06-27 09:31:00

3 个答案:

答案 0 :(得分:140)

您可以使用SimlpeDateFormat格式化日期,如下所示:

long unixSeconds = 1372339860;
// convert seconds to milliseconds
Date date = new java.util.Date(unixSeconds*1000L); 
// the format of your date
SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
// give a timezone reference for formatting (see comment at the bottom)
sdf.setTimeZone(java.util.TimeZone.getTimeZone("GMT-4")); 
String formattedDate = sdf.format(date);
System.out.println(formattedDate);

SimpleDateFormat采用的模式非常灵活,您可以在javadocs中检查所有可用于根据您在给定特定Date时编写的模式生成不同格式的变体。 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

  • 由于Date提供的getTime()方法返回自EPOC以来的毫秒数,因此您需要向SimpleDateFormat时区提供一个时区,以根据您的时区正确设置日期格式,否则它将使用JVM的默认时区(如果配置得当,则无论如何都是正确的)

答案 1 :(得分:31)

Java 8引入了Instant.ofEpochSecond实用程序方法,用于从Unix时间戳创建Instant,然后可以将其转换为ZonedDateTime并最终格式化,例如:

final DateTimeFormatter formatter = 
    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

final long unixTime = 1372339860;
final String formattedDtm = Instant.ofEpochSecond(unixTime)
        .atZone(ZoneId.of("GMT-4"))
        .format(formatter);

System.out.println(formattedDtm);   // => '2013-06-27 09:31:00'

我认为这可能对使用Java 8的人有用。

答案 2 :(得分:11)

您需要将时间戳乘以1000来将其转换为毫秒:

java.util.Date dateTime=new java.util.Date((long)timeStamp*1000);