java 时间戳 周几_Java:Unix时间戳记中的日期

我需要将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。

应该怎么做?

如果您使用Java 8或更高版本:请查看以下答案:stackoverflow.com/a/24703644/1115554

仅供参考,麻烦的旧日期时间类(例如java.util.Date)现在已被遗留,由java.time类取代。 请参见Oracle教程。

对于1280512800,乘以1000,因为java期望的是毫秒:

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

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

从文档中:

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.

强制转换为(long)非常重要:没有它,整数将溢出。

Java.util.Date和Date之间有什么区别?

@TomasK java.util.Date是该类的完全限定名称。如果在类中导入java.util包,则Date可能完全相同。

@PabloSantaCruz谢谢:)

不需要强制转换为long。 time = new java.util.Date(timeStamp * 1000L)也可以正常工作(因为1000L很长,所以在乘法之前,时间戳会被转换为很长的时间)

我个人会这样做:Date time = new Date(TimeUnit.MILLISECONDS.convert(unixTimestamp, TimeUnit.SECONDS));

仅供参考,麻烦的旧日期时间类(例如java.util.Date)现在已被遗留,由java.time类取代。请参见Oracle教程。

java.time

Java 8引入了一种用于处理日期和时间的新API:java.time包。

使用java.time可以使用:

Date date = Date.from( Instant.ofEpochSecond( timeStamp ) );

Instant表示Java 8中的时间戳。使用静态Date.from()方法,您可以将Instant转换为java.util.Date实例。

尽管从技术上来讲这个答案是正确的,但是请注意java.time类取代了麻烦的旧日期时间类,例如java.util.Date。旧类是遗留的,应避免使用。尽管您确实可以与旧类和java.time类进行相互转换,但最好尽可能使用java.time。

这是正确的方法:

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)。

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

警告:如果timestamp是整数,则需要先将其强制转换为(long),否则您将得到错误的日期。 mydate.setTimeInMillis((long) timestamp*1000);

日历链接损坏

我已经修复了链接。

仅供参考,麻烦的旧日期时间类(例如java.util.Date,java.util.Calendar和java.text.SimpleDateFormat)现在已被遗留,由内置在Java 8及更高版本中的java.time类取代。请参见Oracle教程。

TL;博士

Instant.ofEpochSecond( 1_280_512_800L )

2010-07-30T18:00:00Z

java.time

Java 8及更高版本中内置的新java.time框架是Joda-Time的后继者。

这些新类包括一个方便的工厂方法,可将新的秒数转换为纪元。您在UTC时间轴上获得Instant的瞬间,分辨率高达纳秒。

Instant instant = Instant.ofEpochSecond( 1_280_512_800L );

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

看到该代码在IdeOne.com上实时运行。

Asia/Kabul或Asia/Tehran时区?

您报告的一天时间值为22:30,而不是此处看到的18:00。我怀疑您的PHP实用工具暗中应用了默认时区以从UTC进行调整。我的值是UTC,用Z表示(Zulu的缩写,表示UTC)。您的机器操作系统或PHP是否有可能被设置为Asia/Kabul或Asia/Tehran时区?我想,当您在输出中报告IRST时,这显然意味着伊朗时间。目前,在2017年,这些区域是唯一夏季时间比UTC提前四个半小时的区域。

以continent/region格式指定正确的时区名称,例如America/Montreal,Africa/Casablanca或Pacific/Auckland。切勿使用3-4个字母的缩写,例如EST或IST或IRST,因为它们不是真实的时区,不是标准化的,甚至不是唯一的(!)。

如果要通过特定区域的时区的镜头查看自己的时刻,请应用ZoneId以获得ZonedDateTime。同步时刻仍然相同,但被视为不同的挂钟时间。

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.time转换为旧类

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

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

乔达时间

更新:Joda-Time项目现在处于维护模式,团队建议迁移到java.time类。

仅供参考,Joda-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框架内置于Java 8及更高版本中。这些类取代了麻烦的旧版旧式日期时间类,例如java.util.Date,Calendar和SimpleDateFormat。

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。

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

在哪里获取java.time类?

Java SE 8,Java SE 9和更高版本

内置。

标准Java API的一部分,具有捆绑的实现。

Java 9添加了一些次要功能和修复。

Java SE 6和Java SE 7

java.time的许多功能在ThreeTen-Backport中都被反向移植到Java 6和7。

Android的

更高版本的Android捆绑了java.time类的实现。

对于早期的Android(<26),ThreeTenABP项目改编了ThreeTen-Backport(如上所述)。请参阅如何使用ThreeTenABP…。

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval,YearWeek,YearQuarter等。

Date的构造函数期望timeStamp值以毫秒为单位。

将时间戳记的值乘以1000,然后传递给构造函数。

如果要在另一台计算机上转换时间戳记值,则还应检查该计算机的时区。例如;

如果使用EST或UTC时区,则上述说明将产生不同的Date值。

设置时区;又名UTC,

您可以简单地重写;

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));

我不建议这样做,因为这为整个jvm设置了时区,而不仅仅是解析过程!

Date d = new Date(i * 1000 + TimeZone.getDefault().getRawOffset());

没有更多的文字说明,为什么这个问题比其他问题更可取,目前尚不清楚。你能澄清一下吗?

这将修改日期,而不是转换日期!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取当天日期 获取本周一日期 获取本周日的日期 获取上周一日期:" + tt.getPreviousWeekday("yyyy-MM-dd")); 获取上周日日期:" + tt.getPreviousWeekSunday("yyyy-MM-dd")); 获取上周一日期:" + tt.getWeekday(-1, "yyyy-MM-dd")); 获取上周日日期:" + tt.getWeekSunday(-1, "yyyy-MM-dd")); 获取下周一日期:" + tt.getNextMonday("yyyy-MM-dd")); 获取下周日日期:" + tt.getNextSunday("yyyy-MM-dd")); 获取本月第一天日期:" + tt.getFirstDayOfMonth()); 获取本月最后一天日期:" + tt.getDefaultDay()); 获取上月第一天日期:" + tt.getPreviousMonthFirst("yyyy-MM-dd")); 获取上月最后一天的日期:" + tt.getPreviousMonthEnd("yyyy-MM-dd")); 获取某月第一天日期:" + tt.getMonthFirst(0, "yyyy-MM-dd")); 获取某月最后一天的日期:" + tt.getMonthEnd(0, "yyyy-MM-dd")); 获取下月第一天日期:" + tt.getNextMonthFirst("yyyy-MM-dd")); 获取下月最后一天日期:" + tt.getNextMonthEnd("yyyy-MM-dd")); 获取本年的第一天日期:" + tt.getCurrentYearFirst()); 获取本年最后一天日期:" + tt.getCurrentYearEnd()); 获取去年的第一天日期:" + tt.getPreviousYearFirst()); 获取去年的最后一天日期:" + tt.getPreviousYearEnd()); 获取明年第一天日期:" + tt.getNextYearFirst()); 获取明年最后一天日期:" + tt.getNextYearEnd()); 获取本季度第一天:" + tt.getThisSeasonFirstTime(11)); 获取本季度最后一天:" + tt.getThisSeasonFinallyTime(11)); 获取两个日期之间间隔天数 获取当前月的第几周:" + tt.getWeekOfMonth()); 获取当前年份:" + tt.getYear()); 获取当前月份:" + tt.getMonth()); 获取今天在本年的第几天:" + tt.getDayOfYear()); 获得今天在本月的第几天(获得当前日):" + tt.getDayOfMonth()); 获得今天在本周的第几天:" + tt.getDayOfWeek()); 字符串转时间 获得一个日期所在周的星期几的日期

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值