Подтвердить что ты не робот

Преобразование LocalDateTime в LocalDateTime в UTC

Преобразование LocalDateTime в LocalDateTime в UTC.

LocalDateTime convertToUtc(LocalDateTime date) {

    //do conversion

}

Я искал через сеть. Но не получил решение

4b9b3361

Ответ 1

Вы можете попробовать

Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());

И из Date class getTime() всегда будет возвращать время в UTC

Ответ 2

Существует еще более простой способ

LocalDateTime.now(Clock.systemUTC())

Ответ 3

LocalDateTime не содержит информации о зоне. ZonedDatetime делает.

Если вы хотите конвертировать LocalDateTime в UTC, вам нужно обернуть кулаком ZonedDateTime.

Вы можете конвертировать, как показано ниже.

LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt.toLocalTime());

ZonedDateTime ldtZoned = ldt.atZone(ZoneId.systemDefault());

ZonedDateTime utcZoned = ldtZoned.withZoneSameInstant(ZoneId.of("UTC"));

System.out.println(utcZoned.toLocalTime());

Ответ 4

Используйте ниже. Он принимает местное время и преобразует его в UTC с использованием часового пояса. Вам не нужно создавать эту функцию.

ZonedDateTime nowUTC = ZonedDateTime.now(ZoneOffset.UTC);
System.out.println(nowUTC.toString());

Если вам нужно получить часть LocalDateTime в ZonedDateTime, вы можете использовать следующее.

nowUTC.toLocalDateTime();

Вот статический метод, который я использую в своем приложении для ввода времени UTC в mysql, поскольку я не могу добавить значение по умолчанию UTC_TIMESTAMP в столбец datetime.

public static LocalDateTime getLocalDateTimeInUTC(){
    ZonedDateTime nowUTC = ZonedDateTime.now(ZoneOffset.UTC);

    return nowUTC.toLocalDateTime();
}

Ответ 5

TL;DR: просто нет способа сделать это; если вы пытаетесь это сделать, вы получите неправильный LocalDateTime.

Причина в том, что LocalDateTime не записывает часовой пояс после создания экземпляров. Вы не можете преобразовать время даты без часового пояса в другое время на основе определенного часового пояса.

По сути, LocalDateTime.now() никогда не следует вызывать в производственном коде, если только ваша цель не получает случайные результаты. Когда вы создаете такой экземпляр LocalDateTime, этот экземпляр содержит дату только ТОЛЬКО на основе текущего временного пояса сервера, что означает, что этот фрагмент кода будет генерировать другой результат, если он использует сервер с другим часовым поясом конфигурации.

LocalDateTime может упростить расчет даты. Если вам нужно настоящее универсальное время использования данных, используйте ZonedDateTime или OffsetDateTime: https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html.

Ответ 6

Я лично предпочитаю

LocalDateTime.now(ZoneOffset.UTC);

так как это наиболее читаемый параметр.

Ответ 7

вы можете реализовать помощника, делающего что-то вроде этого:

public static LocalDateTime convertUTCFRtoUTCZ(LocalDateTime dateTime) {
    ZoneId fr = ZoneId.of("Europe/Paris");
    ZoneId utcZ = ZoneId.of("Z");
    ZonedDateTime frZonedTime = ZonedDateTime.of(dateTime, fr);
    ZonedDateTime utcZonedTime = frZonedTime.withZoneSameInstant(utcZ);
    return utcZonedTime.toLocalDateTime();
}

Ответ 8

Вот простой небольшой класс утилиты, который вы можете использовать для преобразования локальных дат из зоны в зону, включая метод утилиты, непосредственно для преобразования локального времени даты из текущей зоны в UTC (с основным методом, чтобы вы могли запускать его и см. результаты простого теста):

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;

public final class DateTimeUtil {
    private DateTimeUtil() {
        super();
    }

    public static void main(final String... args) {
        final LocalDateTime now = LocalDateTime.now();
        final LocalDateTime utc = DateTimeUtil.toUtc(now);

        System.out.println("Now: " + now);
        System.out.println("UTC: " + utc);
    }

    public static LocalDateTime toZone(final LocalDateTime time, final ZoneId fromZone, final ZoneId toZone) {
        final ZonedDateTime zonedtime = time.atZone(fromZone);
        final ZonedDateTime converted = zonedtime.withZoneSameInstant(toZone);
        return converted.toLocalDateTime();
    }

    public static LocalDateTime toZone(final LocalDateTime time, final ZoneId toZone) {
        return DateTimeUtil.toZone(time, ZoneId.systemDefault(), toZone);
    }

    public static LocalDateTime toUtc(final LocalDateTime time, final ZoneId fromZone) {
        return DateTimeUtil.toZone(time, fromZone, ZoneOffset.UTC);
    }

    public static LocalDateTime toUtc(final LocalDateTime time) {
        return DateTimeUtil.toUtc(time, ZoneId.systemDefault());
    }
}

Ответ 9

public static String convertFromGmtToLocal(String gmtDtStr, String dtFormat, TimeZone lclTimeZone) throws Exception{
        if (gmtDtStr == null || gmtDtStr.trim().equals("")) return null;
        SimpleDateFormat format = new SimpleDateFormat(dtFormat);
        format.setTimeZone(getGMTTimeZone());
        Date dt = format.parse(gmtDtStr);
        format.setTimeZone(lclTimeZone);
        return

format.format(дт);   }