如何在Java中将当前时间戳添加到Date对象?

时间:2018-06-20 18:56:53

标签: java date

我需要将Date对象传递到我的API正在调用的服务中。我有Date的日期,月份和年份的信息,但还需要一个时间戳。服务期望采用以下格式:

<date>2015-04-01T00:00:00-05:00</date>

如何为日期添加一些内容以获取这种格式?

3 个答案:

答案 0 :(得分:4)

请勿使用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 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. 

答案 1 :(得分:1)

在Java中使用日期一直是一个丑陋的烂摊子。日期类现在大部分已被弃用。我正在使用LocalDateTime,您可以在其中调用年,月,日,时,分和秒来构造它。这是我能想到的:

LocalDateTime ldt = LocalDateTime.of(1997, Month.SEPTEMBER, 2, 1, 23, 0);
ZonedDateTime systemTime = ldt.atZone(ZoneId.systemDefault());
DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; //Basil's idea
System.out.println(systemTime.format(formatter));

输出:

1997-09-02T01:23:00-05:00

答案 2 :(得分:0)

您可以为此使用SimpleDateFormat。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
dateFormat.format(new Date());