Используя ThreeTenABP, я смог преобразовать свой код в следующее:
/**
* @param d int arr that holds date vals
* @param from Time zone to convert from
* @param to Time zone to convert to
* @return Converted date as String
*/
protected String doConvertTime(int[] d, ZoneId from, ZoneId to, DateTimeFormatter format){
LocalDateTime before = LocalDateTime.of(d[0], d[1], d[2], d[3], d[4]);
ZonedDateTime beforeTime = ZonedDateTime.of(before, from);
ZonedDateTime afterTime = beforeTime.withZoneSameInstant(to);
return afterTime.format(format);
}
int [] d:
Я анализирую частиСтроки, которые содержат значения и помещают их в целочисленный массив, который передается в функцию, показанную выше.Это казалось проще, чем разбор непосредственно из строки, потому что я работаю с несколькими строками.Таким образом, я могу убедиться, что все данные объединены в одну область.
ZoneId от & ZoneId до:
Я инициализировал два ZoneId в начале основной функции, так что я могу использовать их взаимозаменяемо.Например, локально до utc: от = local, до = utc / utc до local: от = utc, до = local.В действительности можно использовать любые два часовых пояса.
Формат DateTimeFormatter:
Я только хотел вернуть строку в формате "MM / dd / yy" или«ЧЧ: мм», потому что так разделяются мои строки, содержащие эти значения.Однако мне нужны все данные, относящиеся к дате, чтобы убедиться, что часовой пояс используется должным образом, а день, месяц или даже год не меняются из-за изменения часового пояса.Например, 2018-12-31 22:00 (EST) "Америка / Нью-Йорк" -> 2019-01-01 03:00 (UTC) (смещение -05: 00) Если бы у меня было только значение времени (ЧЧ: мм)тогда дата не изменилась бы.