代码之家  ›  专栏  ›  技术社区  ›  Xenph Yan

到Java日期对象的UNIX历元时间

  •  66
  • Xenph Yan  · 技术社区  · 16 年前

    我有一个字符串包含 UNIX Epoch time ,我需要把它转换成Java日期对象。

    String date = "1081157732";
    DateFormat df = new SimpleDateFormat(""); // This line
    try {
      Date expiry = df.parse(date);
     } catch (ParseException ex) {
      ex.getStackTrace();
    }
    

    有标记的线是我遇到麻烦的地方。我不知道simpledateformat()的参数应该是什么,甚至我不知道应该使用simpledateformat()。

    7 回复  |  直到 9 年前
        1
  •  100
  •   Community CDub    7 年前

    只是:

    Date expiry = new Date(Long.parseLong(date));
    

    编辑:按 rde6173 的答案,并仔细研究在该问题中指定的输入,“1081157732”似乎是一个秒为基础的历元值,所以你想把长从PARSELUN()乘以1000,转换为毫秒,这是Java的日期构造函数使用什么,所以:

    Date expiry = new Date(Long.parseLong(date) * 1000);
    
        2
  •  35
  •   Ryan Emerle    16 年前

    epoch是 从1970年1月1日开始……

    所以:

    String epochString = "1081157732";
    long epoch = Long.parseLong( epochString );
    Date expiry = new Date( epoch * 1000 );
    

    更多信息: http://www.epochconverter.com/

        3
  •  15
  •   Basil Bourque    9 年前

    Java.时间

    使用 java.time 框架内置到Java 8和更高版本中。

    import java.time.LocalDateTime;
    import java.time.Instant;
    import java.time.ZoneId;
    
    long epoch = Long.parseLong("1081157732");
    Instant instant = Instant.ofEpochSecond(epoch);
    ZonedDateTime.ofInstant(instant, ZoneOffset.UTC); # ZonedDateTime = 2004-04-05T09:35:32Z[UTC]
    

    在这种情况下,你最好使用 ZonedDateTime 在中标记为日期 UTC 时区,因为epoch是在UTC中定义的 Unix time 由Java使用。

    ZoneOffset 包含一个方便的UTC时区常量,如上面最后一行所示。它的超类, ZoneId 可用于调整到其他时区。

    ZoneId zoneId = ZoneId.of( "America/Montreal" );
    
        4
  •  5
  •   tcurdt    12 年前
    long timestamp = Long.parseLong(date)
    Date expiry = new Date(timestamp * 1000)
    
        5
  •  0
  •   WolfmanDragon    16 年前

    更好的是,使用 JodaTime . 更容易解析字符串并将其转换为字符串。也是线程安全的。值得花时间来实现它。

        6
  •  0
  •   Dinesh Jayabalan    9 年前

    将秒时间戳转换为毫秒时间戳。您可以使用时间单位API和类似的工具。

    long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

        7
  •  -1
  •   Varkhan    16 年前

    哼…如果我没有弄错,unix的epoch时间实际上与

    System.currentTimeMillis()
    

    所以写作

    try {
        Date expiry = new Date(Long.parseLong(date));
    }
    catch(NumberFormatException e) {
        // ...
    }
    

    应该可以工作(并且可以更快地分析日期)