Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:来自unix的日期时间戳_Java_Unix_Timestamp - Fatal编程技术网

Java:来自unix的日期时间戳

Java:来自unix的日期时间戳,java,unix,timestamp,Java,Unix,Timestamp,我需要将unix时间戳转换为日期对象。 我试过这个: java.util.Date time = new java.util.Date(timeStamp); 时间戳值为:1280512800 日期应该是“2010/07/30-22:30:00”(我是通过PHP得到的),但是我得到的是1970年第一季度的Thu Jan 15 23:11:56 应该怎么做?对于1280512800,乘以1000,因为java需要毫秒: java.util.Date time=new java.util.Date

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

java.util.Date time = new java.util.Date(timeStamp);
时间戳值为:
1280512800

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


应该怎么做?

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

java.util.Date time=new java.util.Date((long)timeStamp*1000);
如果已经有毫秒,那么只需
newjava.util.Date((长)时间戳);

从:

分配一个日期对象和 初始化它以表示 指定的自开始的毫秒数 标准基准时间称为“基准时间” 即1970年1月1日, 00:00:00GMT


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

这是正确的方法:

Date date = new Date ();
date.setTime((long)unix_time*1000);

看起来日历是一种新的方式:

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


如果要在其他机器上转换时间戳值,还应检查该机器的时区。比如,

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

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

    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));
java.time 引入了一个用于处理日期和时间的新API:

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

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

Date date = Date.from( instant );
tl;博士 2010-07-30T18:00:00Z

java.time java 8及更高版本中构建的新java.time框架是Joda time的继承者

这些新课程包括来自新纪元的课程。您将获得一个
瞬间
,即UTC时间线上的一个瞬间,分辨率高达纳秒

Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
instant.toString():2010-07-30T18:00:00Z

你看

亚洲/喀布尔
亚洲/德黑兰
时区? 您报告的时间值为22:30,而不是此处显示的18:00。我怀疑您的PHP实用程序隐式地应用了默认时区来从UTC进行调整。我这里的值是UTC,由
Z
表示(缩写为
Zulu
,表示UTC)。您的机器操作系统或PHP是否有可能设置为
Asia/Kabul
或时区?我想是这样的,因为您在输出中报告了
IRST
,这显然意味着伊朗时间。目前,2017年夏季运行时间比UTC提前四个半小时

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,例如
EST
IST
IRST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)

如果你想通过某个特定地区的时区来观察你的时刻,请应用
ZoneId
来获得一个。仍然是同一时刻,但被视为不同的时刻

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

从java.time转换为遗留类 您应该坚持使用新的java.time类。但如果需要,您可以转换为旧版本

java.util.Date date = java.util.Date.from( instant );
乔达时间 更新:项目现在已经开始,团队建议迁移到类

Date date = Date.from( instant );
仅供参考,a的构造函数是类似的:乘以1000生成
long
(而不是
int
!)

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

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

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(对于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)
      
      }
      

      有时候你需要调整一下

      不要长时间使用石膏!使用纳米调整

      例如,使用Oanda Java API进行交易,您可以获得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) );
      

      警告:如果
      timestamp
      是一个整数,则需要先将其强制转换为
      (长)
      ,否则将以错误的日期结束。
      mydate.setTimeInMillis((长)timestamp*1000)
      FYI,像和
      java.text.simpleDataFormat
      这样麻烦的旧日期时间类现在被内置在java 8和更高版本中的类所取代。请参阅。我不会重新编译它,因为这将为整个jvm设置时区,而不仅仅是解析过程!转换为
      (long)
      非常重要:如果没有它,整数将溢出。@TomasK
      java.util.Date
      是类的完全限定名。
      Date
      可能与导入
      java.util
      pac完全相同
      fun unixToDate(timeStamp: Long) : String? {
          val time = java.util.Date(timeStamp as Long * 1000)
          val sdf = SimpleDateFormat("yyyy-MM-dd")
          return sdf.format(time)
      
      }
      
          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) );