代码之家  ›  专栏  ›  技术社区  ›  Ariyan

Java:datefrom unix时间戳

  •  215
  • Ariyan  · 技术社区  · 16 年前

    我需要将unix时间戳转换为日期对象。
    我试过这个:

    java.util.Date time = new java.util.Date(timeStamp);
    

    1280512800

    日期应该是“2010/07/30-22:30:00”(我通过PHP得到),但是我得到的是 Thu Jan 15 23:11:56 IRST 1970

    应该怎么做?

    8 回复  |  直到 12 年前
        1
  •  453
  •   OneCricketeer Gabriele Mariotti    8 年前

    1280512800 ,乘以1000,因为java需要毫秒:

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

    如果你已经有毫秒了,那就 new java.util.Date((long)timeStamp);

    从 documentation

    分配日期对象和 指定的毫秒数 标准基准时间称为 格林威治标准时间00:00:00。

        2
  •  67
  •   user136036    6 年前

    java.time文件

    Java 8 java.time package .

    使用java.time,您可以解析自1970年第一时刻的历元引用(UTC,1970-01-01T00:00Z)以来的整秒计数。结果是 Instant .

    Instant instant = Instant.ofEpochSecond( timeStamp );
    

    如果你需要 java.util.Date 与尚未更新的旧代码进行互操作 java.time文件 ,转换。调用添加到旧类中的新转换方法。

    Date date = Date.from( instant );
    
        3
  •  44
  •   Marco Fantasia    15 年前

    Date date = new Date ();
    date.setTime((long)unix_time*1000);
    
        4
  •  33
  •   Basil Bourque    7 年前

    热释光;博士

    Instant.ofEpochSecond( 1_280_512_800L )
    

    2010-07-30T18:00:00Z

    java.time文件

    Java8及更高版本中构建的新java.time框架是JodaTime的继承者。

    这些新课程包括 handy factory method to convert a count of whole seconds Instant ,时间线上的一刻(UTC),分辨率高达纳秒。

    Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
    

    instant.toString():2010-07-30T18:00:00Z

    看到了吗 code run live at IdeOne.com

    Table of date-time types in Java, both modern and legacy

    Asia/Kabul 或 Asia/Tehran 时区?

    Z (缩写为 Zulu 或 Asia/Tehran 时区?我想你报告的时候也是这样 IRST 在你的输出中,这显然意味着伊朗时间。目前在2017年 those are the only zones 夏季作业时间比UTC提前4个半小时。

    指定一个 proper time zone name 格式为 continent/region ,例如 America/Montreal , Africa/Casablanca ,或 Pacific/Auckland . 切勿使用3-4个字母的缩写,如 EST 或 IST 或 第一 不 真正的时区,不是标准化的,甚至不是唯一的(!)。

    如果你 要通过某个特定地区的时区来观察你的时刻,请应用 ZoneId 得到一个 ZonedDateTime . 仍然是同一时刻,但被视为一个不同的时刻 wall-clock time .

    ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
    ZonedDateTime zdt = instant.atZone( z );  // Same moment, same point on timeline, but seen as different wall-clock time.
    

    2010-07-30T22:30+04:30[亚洲/德黑兰]

    从java.time转换为遗留类

    您应该继续使用新的java.time类。但如果需要,你可以改成旧的。

    java.util.Date date = java.util.Date.from( instant );
    

    更新:The Joda-Time 项目正在进行中 maintenance mode java.time 班级。

    乔达时间 DateTime 相似的是:乘以一千就得到一个 long (不是 int !).

    DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
    

    最好避免使用众所周知的麻烦的java.util.Date和.Calendar类。但如果必须使用日期,可以从Joda Time转换。

    java.util.Date date = dateTime.toDate();
    

    关于 java.time文件

    java.time legacy 日期时间类,例如 java.util.Date , Calendar SimpleDateFormat .

    Joda-Time 项目,正在进行中 维护模式 java.time 班级。

    要了解更多信息,请参阅 Oracle Tutorial . 和搜索堆栈溢出的许多例子和解释。规格为 JSR 310 .

    你可以交换 java.time文件 对象直接与数据库连接。使用 JDBC driver JDBC 4.2 或者更晚。不需要线,不需要线 java.sql.* 班级。

    从哪里获得java.time类?

    这个 ThreeTen-Extra project使用其他类扩展java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和 more .

        5
  •  26
  •   Ricbit    11 年前

    Calendar mydate = Calendar.getInstance();
    mydate.setTimeInMillis(timestamp*1000);
    out.println(mydate.get(Calendar.DAY_OF_MONTH)+"."+mydate.get(Calendar.MONTH)+"."+mydate.get(Calendar.YEAR));
    

    最后一行只是如何使用它的一个例子,这一行将打印例如“14.06.2012”。

    如果使用System.currentTimeMillis()保存时间戳,则不需要“*1000”部分。

    https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html

        6
  •  12
  •   f1sh    6 年前

    Date的构造函数要求时间戳值以毫秒为单位。 将时间戳的值乘以1000,然后将其传递给构造函数。

        7
  •  7
  •   tmr    13 年前

    如果要在不同的机器上转换时间戳值,还应该检查该机器的时区。例如;

    如果使用EST或UTC时区运行,上述说明将产生不同的日期值。

    设置时区;又称UTC, 你可以简单地重写;

        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
        java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));
    
        8
  •  2
  •   ΓDΛ    6 年前

    为了科特林

    fun unixToDate(timeStamp: Long) : String? {
        val time = java.util.Date(timeStamp as Long * 1000)
        val sdf = SimpleDateFormat("yyyy-MM-dd")
        return sdf.format(time)
    
    }
    
        9
  •  0
  •   Damir Isanbirdin    6 年前

    不要用石膏太久!使用纳米调整。

    例如,使用oandajavaapi进行交易,您可以获得UNIX格式的datetime。

    例如:1592523410.590566943

        System.out.println("instant with nano = " + Instant.ofEpochSecond(1592523410, 590566943));
        System.out.println("instant = " + Instant.ofEpochSecond(1592523410));
    

    你会得到:

    instant with nano = 2020-06-18T23:36:50.590566943Z
    instant = 2020-06-18T23:36:50Z
    

     Date date = Date.from( Instant.ofEpochSecond(1592523410, 590566943) );
    
        10
  •  -4
  •   Masatsugu Hosoi    11 年前
    Date d = new Date(i * 1000 + TimeZone.getDefault().getRawOffset());