Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2018-04-26 23:07:26 +02:00
commit b691f9a3de
2 changed files with 41 additions and 5 deletions

View File

@ -44,6 +44,7 @@ import java.time.OffsetDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Properties; import java.util.Properties;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -188,13 +189,31 @@ public class ParsingUtilities {
* @return LocalDateTime or null if the parse failed * @return LocalDateTime or null if the parse failed
*/ */
static public OffsetDateTime stringToDate(String s) { static public OffsetDateTime stringToDate(String s) {
Instant instant = Instant.parse(s); // Accept timestamps with an explicit time zone
return OffsetDateTime.ofInstant(instant, ZoneId.of("Z")); try {
return OffsetDateTime.parse(s);
} catch(DateTimeParseException e) {
}
// Also accept timestamps without an explicit zone and
// assume them to be in local time.
try {
LocalDateTime localTime = LocalDateTime.parse(s);
return OffsetDateTime.of(localTime, ZoneId.systemDefault().getRules().getOffset(localTime));
} catch(DateTimeParseException e) {
}
return null;
} }
static public LocalDateTime stringToLocalDate(String s) { static public LocalDateTime stringToLocalDate(String s) {
Instant instant = Instant.parse(s); // parse the string as a date and express it in local time
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); OffsetDateTime parsed = stringToDate(s);
if (parsed == null) {
return null;
}
return parsed.toLocalDateTime();
} }
static public String instantToString(Instant instant) { static public String instantToString(Instant instant) {

View File

@ -105,7 +105,24 @@ public class ParsingUtilitiesTests extends RefineTest {
OffsetDateTime zdt = ParsingUtilities.stringToDate(historyEntryDate); OffsetDateTime zdt = ParsingUtilities.stringToDate(historyEntryDate);
String zdtString = ParsingUtilities.dateToString(zdt); String zdtString = ParsingUtilities.dateToString(zdt);
Assert.assertEquals(zdtString, historyEntryDate); Assert.assertEquals(zdtString, historyEntryDate);
}
@Test
public void stringToDate() {
Assert.assertEquals(2017, ParsingUtilities.stringToDate("2017-04-03T08:09:43.123").getYear());
Assert.assertEquals(2017, ParsingUtilities.stringToDate("2017-04-03T08:09:43").getYear());
Assert.assertEquals(2017, ParsingUtilities.stringToDate("2017-04-03T08:09:43Z").getYear());
Assert.assertEquals(2017, ParsingUtilities.stringToDate("2017-04-03T08:09:43.123Z").getYear());
Assert.assertEquals(2017, ParsingUtilities.stringToDate("2017-04-03T08:09:43+00:00").getYear());
}
@Test
public void stringToLocalDate() {
Assert.assertEquals(2017, ParsingUtilities.stringToLocalDate("2017-04-03T08:09:43.123").getYear());
Assert.assertEquals(2017, ParsingUtilities.stringToLocalDate("2017-04-03T08:09:43").getYear());
Assert.assertEquals(2017, ParsingUtilities.stringToLocalDate("2017-04-03T08:09:43Z").getYear());
Assert.assertEquals(2017, ParsingUtilities.stringToLocalDate("2017-04-03T08:09:43.123Z").getYear());
Assert.assertEquals(2017, ParsingUtilities.stringToLocalDate("2017-04-03T08:09:43+00:00").getYear());
} }
@Test @Test