有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:来自unix的日期时间戳

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

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

时间戳值为:1280512800

日期应该是“2010/07/30-22:30:00”(我是通过PHP得到的),但我得到的是^{

应该怎么做


共 (6) 个答案

  1. # 1 楼答案

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

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

    如果已经有毫秒,那么只需new java.util.Date((long)timeStamp);

    documentation开始:

    Allocates a Date object and initializes it to represent the specified number of milliseconds since the standard base time known as "the epoch", namely January 1, 1970, 00:00:00 GMT.

  2. # 2 楼答案

    这是正确的方法:

    Date date = new Date ();
    date.setTime((long)unix_time*1000);
    
  3. # 3 楼答案

    tl;博士

    Instant.ofEpochSecond( 1_280_512_800L )
    

    2010-07-30T18:00:00Z

    爪哇。时间

    新java。Java 8及更高版本中内置的时间框架是Joda time的继承者

    这些新类包括来自epoch的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/KabulAsia/Tehran时区

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

    continent/region的格式指定一个proper time zone name,例如^{}^{}Pacific/Auckland。切勿使用3-4个字母的缩写,如ESTISTIRST,因为它们不是真正的时区,不标准化,甚至不是唯一的(!)

    如果你通过某个特定地区时区的镜头看到你的时刻,请应用ZoneId来获得^{}。仍然是同一时刻,但被视为不同的时刻

    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[Asia/Tehran]

    从java转换。到遗留类的时间

    您应该坚持使用新的java。时间课。但如果需要,您可以转换为旧版本

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

    乔达时间

    更新:Joda-Time项目现在位于maintenance mode,团队建议迁移到java.time

    仅供参考,aJoda-Time{a15}的构造函数是类似的:乘以1000生成一个long(不是一个int!)

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

    最好避免臭名昭著的麻烦java。util。日期和日期。日历类。但如果必须使用日期,则可以从Joda Time转换

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

    关于java。时间

    java.time框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如^{}^{}、&^{}

    现在位于maintenance modeJoda-Time项目建议迁移到java.time

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

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

    在哪里可以获得java。时间课

    {a36}项目扩展了java。额外上课的时间。这个项目是将来可能添加到java的一个试验场。时间您可以在这里找到一些有用的类,例如^{}^{}^{}more

  4. # 4 楼答案

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

  5. # 5 楼答案

    爪哇。时间

    Java 8引入了一个处理日期和时间的新API:java.time package

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

    Instant instant = Instant.ofEpochSecond( timeStamp );
    

    如果您需要一个java.util.Date来与尚未为java更新的旧代码进行互操作。时间,转换。调用添加到旧类中的新转换方法

    Date date = Date.from( instant );
    
  6. # 6 楼答案

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

    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”

    如果你用过这个系统。currentTimeMillis()保存时间戳,不需要“*1000”部分

    如果在字符串中有时间戳,则需要首先将其解析为long:long。parseLong(时间戳)

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