0

までのミリ秒データを提供しています1473080981L: September 5, 2016 9:50 PM. 私は単体テストを行っていますが、JUnitをいじるのは初めてでした。これまでに気付いたのは、呼び出すたびに次のことです。

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

それでも正しい日付が返されますが、現在、この記事の執筆時点では、現在は夜の午後 10 時であり、このメソッド呼び出しはSeptember 5, 2016 10:00 PM. DateTimeは、設定した時間を尊重しませんでした。

これは正しい動作ですか?独自の定義済みの選択された日時を設定して、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は次のようになります。

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);
}

ありがとう!

4

1 に答える 1

4

最初のメモ1473080981LSun Jan 18 1970 01:11:20UTC 時間です。https://currentmillis.com/で確認できます。

メソッドはwithMillis新しいインスタンスを返す場合があります。変化する:

dateTime.withMillis(dateToMillis);

に:

dateTime = dateTime.withMillis(dateToMillis);

または単に行う:

dateTime = new DateTime(dateToMillis);

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

パラメータ: 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
于 2016-09-05T14:27:27.240 に答える