我试图在每个星期天午夜运行一份报告,其中包括上周六午夜的数据,以及报告开始之前的11:59:59。因此,如果它将在即将到来的星期日(2/17)开始,它会:
我正在尝试获取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日星期日(或任何其他星期日),但它的时间表示和字符串格式我真的很感兴趣。
所以我问:
startDateTime
代表(对于这个例子 - 但我需要动态的答案!)2/10/2013 12:00:00 AM endDateTime
代表(对于这个例子 - 但我需要动态的答案!)2/16/2013 11:59:59 PM startDateTime
和endDateTime
格式化为分别显示为20130210_120000和20130216_115959?提前致谢。
答案 0 :(得分:5)
好的,如前所述,我强烈建议使用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);
进一步请注意,这将使用24小时制,因此它会提供20130210_000000
和20130217_000000
,而不是使用120000
作为时间。这更加一致和明确。鉴于它总是在午夜,你可能只想使用yyyyMMdd
并完全删除时间部分。
答案 1 :(得分:1)
的System.out.println(DateTime.now()的toString( “YYYY-MM-DD”));
toString方法接受格式化模板,请参阅:http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html