2016-09-05 6 views
0

ミリ秒データ1473080981Lを提供しています。日付はSeptember 5, 2016 9:50 PMです。私はユニットテストをしていて、これは初めて遊んでいたのですJUnitJoda DateTimeでミリ秒単位で正しく日付が設定されない

DateTime dateTime = new DateTime(); 
dateTime.withMillis(1473080981L) 

それはまだ正しい日付を返しますが、現在、これを書いている時点で、それは今、夕方10:00 PMで、このメソッドの呼び出しが生成します。私は、これまでに気づいたことは、私が呼ぶたびにということですSeptember 5, 2016 10:00 PMDateTimeは私がそれを設定した時間を尊重しませんでした。

これは正しい動作ですか?あらかじめ定義された選択日時を設定してDateTimeをインスタンス化できる方法はありますか?ここで

は私のユニットテストである(それは無意味であることをご負担ください、私はユニットテストを勉強しています):

public static String format(@NonNull DateTime dateTime, String validFormat) { 
    org.joda.time.format.DateTimeFormatter dateTimeFormat = DateTimeFormat.forPattern(validFormat); 
    return dateTimeFormat.print(dateTime); 
} 

public static String format(long dateToMillis, String validFormat) { 
    org.joda.time.format.DateTimeFormatter dateTimeFormat = DateTimeFormat.forPattern(validFormat); 

    DateTime dateTime = new DateTime(); 
    dateTime.withMillis(dateToMillis); 

    return dateTimeFormat.print(dateTime); 
} 

ありがとう:

String testDate = "September 5, 2016 9:50 PM"; // MMMM dd, yyyy K:mm a 
String testDateResult1 = DateTimeFormatter.format(dateTime, DateTimeFormatter.FORMAT_DEFAULT_DATE_TIME_12); 
String testDateResult2 = DateTimeFormatter.format(thisDay , DateTimeFormatter.FORMAT_DEFAULT_DATE_TIME_12); 

assertTrue(testDate.compareTo(testDateResult1) == 0); 
assertTrue(testDate.compareTo(testDateResult2) == 0); 

マイてDateTimeFormatterは次のようになります!

答えて

4

最初の注:1473080981Lは、UTC時間でSun Jan 18 1970 01:11:20です。あなたはそれを確認することができますhttps://currentmillis.com/

withMillisメソッドは、新しいインスタンスを返す可能性があります。変更:

dateTime = dateTime.withMillis(dateToMillis); 

または単にん::へ

dateTime.withMillis(dateToMillis); 

dateTime = new DateTime(dateToMillis); 

public DateTime withMillis(long newMillis)
が異なるミリ秒で、この 日時のコピーを返します。返されるオブジェクトは、 の新しいインスタンスまたはこれになります。ミリ秒だけが変更され、年表 とタイムゾーンが維持されます。

パラメータ:newMillis - 新しいミリ秒、1970-01-01T00から:00:00Z
戻り値:

import org.joda.time.DateTime; 

public class JodaTest { 

    public static void main(String[] args) { 
    DateTime dateTime = new DateTime(); 
    dateTime = dateTime.withMillis(1473069000000L); 

    System.out.println(dateTime); 
    System.out.println(new DateTime(1473069000000L)); 
    } 
} 

出力:異なるミリ

デモと、この日時の写し:

2016-09-05T11:50:00.000+02:00 
2016-09-05T11:50:00.000+02:00 
関連する問題