您好我有一个看起来像这样的黄瓜测试
Given new "CucumberTest"
| startDate | endDate |
| 01/03/2016 08:00:00:UTC | 05/03/2016 17:00:00:UTC |
测试代码看起来像这样
@Given("^new "([^"]*)"$")
public void test(@Format(DateFormta) List<Travel> travels) {
...
}
现在Travel类有int id
,Date startDate
,Date endDate
个字段。
我想改变一个人旅行的国家的旅行时间。因此,假设服务器位于UTC+2
时区,并且旅行位于UTC+1
区域。当我运行应用程序时,它在我的cucmber测试代码中为我的开始和结束日期添加了2个小时,但我需要它只添加一个。是否可以使用java serializer或deserializer来自动更改?
答案 0 :(得分:0)
Instant.now()
.toString()
...和...
Instant.now()
.atZone( ZoneId.of( "America/Montreal" ) )
.toString()
java.util.Date
您正在使用java.util.Date
课程?这是现在遗留下来的麻烦的旧日期时间类的一部分,取而代之的是java.time类。
在UTC时间轴上使用Instant
片刻。相当于Date
,但分辨率为纳秒而不是毫秒(以及许多其他改进)。
Instant instant = Instant.now() ;
生成/解析字符串时,java.time类默认使用标准的ISO 8601格式。
String output = instant.toString() ;
2017-01-23T12:34:56.987654321Z
最后的Z
是Zulu
的缩写,表示UTC。
永远不要依赖默认时区或偏移量。您可能无法在部署时控制。更糟糕的是,JVM中任何应用程序的任何线程中的任何代码都可以在运行时期间更改当前的默认。
始终指定所需/预期的时区。
ZoneId z = ZoneId.of( "Europe/Berlin" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
在知道时始终使用时区而不是仅仅偏离UTC。时区是特定区域使用的过去,现在和将来的偏移的历史。
始终以continent/region
格式使用时区的真实名称。