我需要将unix时间戳转换为日期对象。 我试了一下:
java.util.Date time = new java.util.Date(timeStamp);
时间戳值:1280512800
日期应该是“2010/07/30 - 22:30:00”(因为我通过PHP得到它),但我得到的是Thu 1月15日23:11:56 IRST 1970。
应该怎么做呢?
我需要将unix时间戳转换为日期对象。 我试了一下:
java.util.Date time = new java.util.Date(timeStamp);
时间戳值:1280512800
日期应该是“2010/07/30 - 22:30:00”(因为我通过PHP得到它),但我得到的是Thu 1月15日23:11:56 IRST 1970。
应该怎么做呢?
当前回答
有时候你需要调整。
不要用cast来长!使用nanoadjustment。
例如,使用Oanda Java API进行交易,您可以获得UNIX格式的datetime。
例如:159252341010.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) );
其他回答
对于1280512800,乘以1000,因为java期望的是毫秒:
java.util.Date time=new java.util.Date((long)timeStamp*1000);
如果你已经有了毫秒,那么只需新建java.util.Date((long)timeStamp);
从文档中可以看到:
分配一个Date对象和 对象初始化它以表示 指定的毫秒数 标准基准时间称为“时” epoch”,即1970年1月1日, 就是格林尼治时间。
Date的构造函数期望timeStamp值以毫秒为单位。 将时间戳的值与1000相乘,然后将其传递给构造函数。
kotlin的
fun unixToDate(timeStamp: Long) : String? {
val time = java.util.Date(timeStamp as Long * 1000)
val sdf = SimpleDateFormat("yyyy-MM-dd")
return sdf.format(time)
}
看起来日历是一种新的方式:
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”部分。
如果你在一个字符串中有时间戳,你需要首先将它解析为long: long . parselong(时间戳)。
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
如果在不同的机器上转换时间戳值,还应该检查该机器的时区。例如;
如果您使用EST或UTC时区运行,上述描述将产生不同的Date值。
设置时区;也就是UTC, 你可以简单地重写;
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));