如何在Java中将UTC时间戳转换为本地日、小时、分钟?

如何在Java中将UTC时间戳转换为本地日、小时、分钟?,java,datetime,Java,Datetime,然后给出时间戳1245613885,该时间戳以GMT为单位 如何使用服务器的本地时区信息在Java中将其转换为年、日、小时、分钟值 您可以使用它。它提供了一种方法(顺便说一句,这是多余的,因为默认情况下它已经选择了系统默认时区) 如果你想用一个可读的日期字符串来表示,那么我建议你这样做 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = sdf.format(calenda

然后给出时间戳1245613885,该时间戳以GMT为单位

如何使用服务器的本地时区信息在Java中将其转换为年、日、小时、分钟值

您可以使用它。它提供了一种方法(顺便说一句,这是多余的,因为默认情况下它已经选择了系统默认时区)

如果你想用一个可读的日期字符串来表示,那么我建议你这样做

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = sdf.format(calendar.getTime());
System.out.println(dateString); // 2009-06-21 15:51:25
(根据我的时区GMT-4,输出正确)


如果需要不同的时区,请更改传递到
日历
对象构造函数中的
时区
值。

基本上,您只需要一个格式化程序即可完成此操作

日期=新日期(1245613885L*1000)
SimpleDataFormat格式化程序=新的SimpleDataFormat('MM/dd/yyyy')

System.out.println(formatter.format(日期))

我会使用像Joda Time这样的东西,它比JDK Date/Calendar类快得多,而且在日期解析方面也没有线程安全问题(不是你的问题与日期解析有关)

tl;博士 jeudi 15 janvier 1970年11月19日00分13秒日本正常

java.time 现代方法使用java.time类,在采用JSR310时,这些类取代了糟糕的日期时间类

如果您的输入
1245613885
是UTC中1970年第一个时刻以来的毫秒数,则将其解析为
瞬间
(UTC中的一个时刻)

使用标准ISO 8601格式生成表示该
即时
对象值的字符串

String output = instant.toString() ;
从UTC调整到特定地区(时区)的人们使用的挂钟时间

大陆/地区
的格式指定,例如
美国/蒙特利尔
非洲/卡萨布兰卡
,或
太平洋/奥克兰
。切勿使用2-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

如果要使用JVM的当前默认时区,请请求它并将其作为参数传递。如果省略,代码将变得模棱两可,我们无法确定您是否打算使用默认值,或者您是否像许多程序员一样不知道这个问题

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
ZoneId
应用于
Instant
以获取
zoneDateTime

ZonedDateTime zdt = instant.atZone( z ) ;  // Same moment as the `instant`, but different wall-clock time.
使用标准ISO 8601格式生成一个字符串,该字符串表示
ZoneDateTime
对象的值,该格式扩展为将分区名称附加在方括号中

String output = zdt.toString() ;

对于其他格式,可以指定自己的自定义格式模式,也可以让java.time自动本地化。对于任一路线,请使用
DateTimeFormatter
。搜索堆栈溢出,因为这已被处理多次。

UTC时间戳表示为从历元开始的秒数。java.util.Calendar使用从历元开始的毫秒数,因此在设置日历上的时间时需要乘以1000。您可以使用
@昵称
以某人的评论为目标,这样他/她将收到有关全局收件箱中的评论和最近活动的通知。请注意,当你自己是提问者或回答者时,这是不必要的:)另请参见meta.+1,如果只是为了表达对99.99%的人类的声援,他们希望现有的JDK日历内容能够火热地死去--茉莉花:
Instant instant = Instant.ofEpochMilli( 1_245_613_885L ) ;
String output = instant.toString() ;
ZoneId z = ZoneId.of( "America/Montreal" ) ;  
ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
ZonedDateTime zdt = instant.atZone( z ) ;  // Same moment as the `instant`, but different wall-clock time.
String output = zdt.toString() ;