2

毎週日曜日の深夜にレポートを実行しようとしています。このレポートには、前の土曜日の深夜から、レポートが開始される直前の11:59:59までのデータが含まれます。したがって、来週の日曜日(2/17)にキックオフされるとすると、次のようになります。

  • 2013年2月17日の深夜(または月曜日の朝、ただし、考えてみてください)に実行します。
  • 2013年2月10日午前0時00分00秒(先週の土曜日の深夜)に開始するデータを含める
  • 2013年2月16日午後11時59分59秒までのデータを含める(今週の土曜日の夜、レポート発行のちょうど1秒前)

startDateTimeとを取得して時間範囲をカプセル化しようとしてendDateTimeいますが、JODAを使用しLocalDateTimeて各値を保持したいと考えています。次に、それらをYYYYMMDD_HHmmss形式の文字列にフォーマットする必要があります。

これが私の最善の試みです:

LocalDateTime rightNow = new LocalDateTime();
LocalDateTime startDateTime = rightNow.minusDays(7);
LocalDateTime endDateTime = rightNow.minusDays(1);

String startDateTimeFormatted = startDateTime.toString();
String endDateTimeFormatted = endDateTime.toString();

System.out.println(startDateTimeFormatted);
System.out.println(endDateTimeFormatted);

これを実行すると、次のようになります。

2013-02-06T12:10:27.411
2013-02-12T12:10:27.411

:今日(2013年2月13日)このコードを実行しているため、開始日と終了日は異なり、日曜日2/17(または他の日曜日)になりますが、時間表現と文字列の書式設定Iここに本当に興味があります。

だから私は尋ねます:

  1. 表現する方法startDateTime(この例では、動的であるために答えが必要です!)2013年2月10日12:00:00 AM
  2. 表現する方法endDateTime(この例では、動的であるために答えが必要です!)2013年2月16日午後11時59分59秒
  3. 両方をフォーマットし、それぞれ20130210_120000および20130216_115959として表示するにはどうすればstartDateTimeよいendDateTimeですか?

前もって感謝します。

4

2 に答える 2

6

さて、前述のように、タイムゾーンとしてUTCを使用し、排他的なエンドポイントを使用することを強くお勧めします。したがって、次を使用できます。

private static final DateTimeFormatter FORMATTER =
    DateTimeFormat.forPattern("yyyyMMdd'_'HHmmss")
                  .withLocale(Locale.US);
...

// I prefer to be explicit about using "the current time". I prefer to use
// an injectable dependency such as a Clock type, too...
DateTime now = new DateTime(System.currentTimeMillis(), DateTimeZone.UTC);

// Note: this *doesn't* ensure that it's the right day of the week.
// You'd need to think about that separately - it may be as simple as
// scheduling it appropriately... but bear your local time zone in mind!
DateTime end = now.withTimeAtStartOfDay();
DateTime start = end.minusDays(7);

String startText = FORMAT.print(start);
String endText = FORMAT.print(end);

20130210_000000さらに、これは24時間制を使用するため、時刻として使用するので20130217_000000はなく、与えることに注意してください120000。これははるかに一貫性があり、明確です。ただし、常に真夜中であることを考えるとyyyyMMdd、時間部分を完全に使用して削除することをお勧めします。

于 2013-02-13T17:56:54.467 に答える
1

System.out.println(DateTime.now()。toString( "yyyy-MM-dd"));

toStringメソッドはフォーマットテンプレートを受け入れます。http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.htmlを参照してください。

于 2013-02-13T17:30:09.077 に答える