我需要将 Date
对象传递到我的 API 正在调用的服务中。我有 Date
的年、月、日信息,但还需要时间戳。该服务期望采用以下格式:
<date>2015-04-01T00:00:00-05:00</date>
如何向日期添加一些内容以获得这种格式?
最佳答案
切勿使用java.util.Date
。被java.time.Instant
取代。
获取您的日期部分。
LocalDate ld = LocalDate.of( 2015 , 4 , 1 ) ;
或者使用可读的Month
枚举。
LocalDate ld = LocalDate.of( 2015 , Month.APRIL , 1 ) ;
获取一天中某个特定时区开始的时间。不要假设一天从 00:00:00 开始,可能是其他时间,例如 01:00:00。让 java.time 为您解决这个问题。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
以您所需的格式(标准 ISO 8601 格式)生成字符串。
DateTimeFormatter f = DateTimeFormatter.ISO_OFFSET_DATE_TIME ;
String output = zdt.format( f ) ;
要查看 UTC 时刻,请提取即时
。
Instant instant = zdt.toInstant() ;
转化
如果您必须与尚未更新java.time的旧代码进行互操作,您可以调用添加到旧类中的新转换方法。其中包括Date::from( Instant )
。
java.util.Date d = java.util.Date.from( instant ) ;
往另一个方向走。
Instant instant = d.toInstant() ;
返回 UTC 以外的时区。
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Pacific/Auckland" ) ) ; // Same moment, different wall-clock time.
关于java - 如何在Java中向Date对象添加当前时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50955235/