Преобразовать строковое время в местное время для сравнения - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь выяснить математику, чтобы убедиться, что сдвиги получают правильные разрывы, когда я запрашиваю API, я получаю следующий ответ:

    "StartDate": "4/25/2018",
    "EndTime": "8:30PM",
    "StartDayNumber": 1,
    "StartTime": "7:30PM",
    "SegmentTypeName": "BREAK",
    "EndDate": "4/25/2018",
    "EndDayNumber": 1

Я пробовал различные попытки использования LocalTime, поэтомуЯ могу использовать функцию Duration:

LocalTime start = LocalTime.parse(employeeShift.getJSONObject(ii).get("StartTime").toString(), DateTimeFormatter.ofPattern("HH:mm a"));
LocalTime end = LocalTime.parse(employeeShift.getJSONObject(ii).get("EndTime").toString());

Я пробовал различные способы преобразования EndTime и StartTime в местное время.Тем не менее, я озадачен тем, что перепробовал различное количество форматеров, включая день, час, но я не нашел пример, включающий am / pm. Нужно ли сначала преобразовывать время в 24 часа?

Ошибка, которую я получил:

java.time.format.DateTimeParseException: текст '1:00 PM' не может быть проанализирован с индексом 0

1 Ответ

0 голосов
/ 26 апреля 2018

Вам просто нужно починить DateTimeFormatter.«ЧЧ» - это час дня (значения от 0 до 23).Для разбора часов AM / PM вам нужно использовать «чч» (часы часов AM / PM, значения от 1 до 12 - , проверьте javadoc ).Кроме того, между минутами и частью AM / PM нет пробела, и для разбора одной цифры часа вы можете использовать только одну букву «h» (она примет одну или две цифры, что, по-видимому, соответствует вашим входам):

LocalTime.parse("7:30PM", DateTimeFormatter.ofPattern("h:mma", Locale.US));

Я также использовал java.util.Locale, потому что строки AM / PM локализованы, и если я не укажу их, будет использоваться JVM по умолчанию - хотя для большинства локалей "AM" и "PM"используется, есть другие языки, которые производят такие вещи, как «я» или некоторые другие строки.

...