Skip to content

Commit

Permalink
fixing datetime truncate for multi-day (#8327)
Browse files Browse the repository at this point in the history
  • Loading branch information
walterddr committed Mar 9, 2022
1 parent 4e98070 commit 07a7ddb
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 6 deletions.
Expand Up @@ -703,7 +703,8 @@ public static String dateTimeConvert(String timeValueStr, String inputFormatStr,
dateTime = dateTime.withHourOfDay((dateTime.getHourOfDay() / size) * size).hourOfDay().roundFloorCopy();
break;
case DAYS:
dateTime = dateTime.withDayOfMonth((dateTime.getDayOfMonth() / size) * size).dayOfMonth().roundFloorCopy();
dateTime = dateTime.withDayOfMonth(((dateTime.getDayOfMonth() - 1) / size) * size + 1).dayOfMonth()
.roundFloorCopy();
break;
default:
break;
Expand Down
Expand Up @@ -80,7 +80,8 @@ public BaseDateTimeTransformer(@Nonnull DateTimeFormatSpec inputFormat, @Nonnull
break;
case DAYS:
_dateTimeTruncate = (dateTime) -> _outputDateTimeFormatter
.print(dateTime.withDayOfMonth((dateTime.getDayOfMonth() / sz) * sz).dayOfMonth().roundFloorCopy());
.print(dateTime.withDayOfMonth(((dateTime.getDayOfMonth() - 1) / sz) * sz + 1).dayOfMonth()
.roundFloorCopy());
break;
default:
_dateTimeTruncate = _outputDateTimeFormatter::print;
Expand Down
Expand Up @@ -456,9 +456,12 @@ public void testDateTimeConvert() {
"1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)", "12:HOURS",
"2018-04-11 00:00:00.000");
// Test conversion from millis since epoch to simple date format (America/Denver timezone with 5 day granularity)
testDateTimeConvert(1519926205000L/* 20180301T09:43:25 */, "1:MILLISECONDS:EPOCH",
"1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)", "5:DAYS",
"2018-03-01 00:00:00.000");
testDateTimeConvert(1522230205000L/* 20180328T09:43:25 */, "1:MILLISECONDS:EPOCH",
"1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)", "5:DAYS",
"2018-03-25 00:00:00.000");
"2018-03-26 00:00:00.000");
// Test conversion from millis since epoch to simple date format (America/Los_Angeles timezone with 1 day
// granularity)
testDateTimeConvert(1524013200000L/* 20180418T01:00:00 */, "1:MILLISECONDS:EPOCH",
Expand Down Expand Up @@ -507,7 +510,7 @@ public void testDateTimeConvert() {
// granularity)
testDateTimeConvert("20180328T09:43:25", "1:HOURS:SIMPLE_DATE_FORMAT:yyyyMMdd''T''HH:mm:ss",
"1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss" + ".SSS tz(America/Denver)", "5:DAYS",
"2018-03-25 00:00:00.000");
"2018-03-26 00:00:00.000");
// Test conversion from simple date format to another simple date format (America/Los_Angeles timezone with 1 day
// granularity)
testDateTimeConvert("20180418T01:00:00", "1:HOURS:SIMPLE_DATE_FORMAT:yyyyMMdd''T''HH:mm:ss",
Expand Down
Expand Up @@ -218,7 +218,7 @@ public Object[][] testDateTimeConversion() {
1523560598000L /* 20180412T19:16:38 */, 1524160502000L /* 20180419T17:55:02 */, 1522230205000L
/* 20180328T09:43:25 */
};
String[] expected = {"2018-04-10 00:00:00.000", "2018-04-15 00:00:00.000", "2018-03-25 00:00:00.000"};
String[] expected = {"2018-04-11 00:00:00.000", "2018-04-16 00:00:00.000", "2018-03-26 00:00:00.000"};
entries.add(new Object[]{
"1:MILLISECONDS:EPOCH", "1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)",
"5:DAYS", input, expected
Expand Down Expand Up @@ -356,7 +356,7 @@ public Object[][] testDateTimeConversion() {
// Test conversion from simple date format to another simple date format (America/Denver timezone with 5 day
// granualrity)
String[] input = {"20180412T19:16:38", "20180419T17:55:02", "20180328T09:43:25"};
String[] expected = {"2018-04-10 00:00:00.000", "2018-04-15 00:00:00.000", "2018-03-25 00:00:00.000"};
String[] expected = {"2018-04-11 00:00:00.000", "2018-04-16 00:00:00.000", "2018-03-26 00:00:00.000"};
entries.add(new Object[]{
"1:HOURS:SIMPLE_DATE_FORMAT:yyyyMMdd'T'HH:mm:ss",
"1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)", "5:DAYS", input, expected
Expand Down

0 comments on commit 07a7ddb

Please sign in to comment.