2017-08-02 75 views
1

你好,我有一個黃瓜測試,看起來像這樣Java序列化黃瓜測試

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) { 
    ... 
} 

現在的旅遊類有int idDate startDateDate endDate領域。 我想改變旅行國家的旅行時間。因此可以說服務器在UTC+2時區,而旅行在UTC+1區域。當我運行該應用程序時,它會在我的cucmber測試代碼中爲我的開始和結束日期添加2個小時,但我需要它只添加一個。是否有可能使用java序列化程序或反序列化程序來自動更改?

回答

0

TL;博士

Instant.now() 
     .toString() 

......還有......

Instant.now() 
     .atZone(ZoneId.of("America/Montreal")) 
     .toString() 

不要java.util.Date

您正在使用java.util.Date類使用?這是現在遺留下來的麻煩的舊日期時間類的一部分,由java.time類代替。

java.time

使用Instant在UTC時間線上的時刻。相當於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

+0

是的我知道java.util.date是一個過時的東西,但問題是我需要使用它,因爲該項目是遺留的... –