Как я могу получить текущую дату и время в UTC или GMT в Java?

Внутри конструктора вы можете использовать ключевое слово this для вызова другого конструктора в том же классе. Это называется явным вызовом конструктора.

Вот еще один класс Rectangle с другой реализацией от той, что находится в разделе «Объекты».

public class Rectangle {
    private int x, y;
    private int width, height;

    public Rectangle() {
        this(1, 1);
    }
    public Rectangle(int width, int height) {
        this( 0,0,width, height);
    }
    public Rectangle(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

}

Этот класс содержит набор конструкторов. Каждый конструктор инициализирует некоторые или все переменные-члены прямоугольника.

437
задан Michael Mrozek 22 August 2011 в 04:43
поделиться

6 ответов

java.util.Date не имеет никакого определенного часового пояса, хотя его значение обычно думается относительно UTC. Что заставляет Вас думать, что это находится в местное время?

, Чтобы быть точным: значение в java.util.Date является количеством миллисекунд с эпохи Unix, которая произошла в полночь 1-го января 1970, UTC. Та же эпоха могла также быть описана в других часовых поясах, но традиционное описание с точки зрения UTC. Поскольку это - много миллисекунд, так как фиксированная эпоха, значение в java.util.Date является тем же во всем мире в какой-то конкретный момент, независимо от зоны местного времени.

я подозреваю, что проблема состоит в том, что Вы отображаете его через экземпляр Календаря, который использует локальный часовой пояс или возможно использование Date.toString(), который также использует локальный часовой пояс, или SimpleDateFormat экземпляр, который, по умолчанию, также использует локальный часовой пояс.

, Если это не проблема, отправьте некоторый пример кода.

я, однако, рекомендовал бы использовать Joda-разовый так или иначе, который предлагает намного более ясный API.

380
ответ дан Cuga 22 August 2011 в 04:43
поделиться

С:

Calendar cal = Calendar.getInstance();

Тогда cal имеют текущую дату и время.
Вы также могли получить текущую дату и Время для часового пояса с:

Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));

Вы могли спросить cal.get(Calendar.DATE); или другой Календарь, постоянный о деталях других.
Дата и Метка времени удерживаются от использования в Java. Календарный класс это не.

5
ответ дан user2427 22 August 2011 в 04:43
поделиться

Вы можете использовать:

Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));

, то все операции, выполняемые с использованием объекта AGMTCalendar, будут выполнены с помощью часового пояса GMT и не будут иметь временное время сэкономления дневного света или не установленные закрепленные смещения. Я думаю, что предыдущий постер правильно, что объект DATE () всегда возвращает GMT, до тех пор, пока вы не сделаете что-то сделать с объектом даты, который он превращается в местное часовое часовое время.

6
ответ дан 22 November 2019 в 23:05
поделиться
    Calendar c = Calendar.getInstance();
    System.out.println("current: "+c.getTime());

    TimeZone z = c.getTimeZone();
    int offset = z.getRawOffset();
    if(z.inDaylightTime(new Date())){
        offset = offset + z.getDSTSavings();
    }
    int offsetHrs = offset / 1000 / 60 / 60;
    int offsetMins = offset / 1000 / 60 % 60;

    System.out.println("offset: " + offsetHrs);
    System.out.println("offset: " + offsetMins);

    c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
    c.add(Calendar.MINUTE, (-offsetMins));

    System.out.println("GMT Time: "+c.getTime());
65
ответ дан 22 November 2019 в 23:05
поделиться
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));

//Local time zone   
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");

//Time in GMT
return dateFormatLocal.parse( dateFormatGmt.format(new Date()) );
270
ответ дан 22 November 2019 в 23:05
поделиться

Календарь aGMTCalendar = Calendar.getInstance (TimeZone.getTimeZone ("GMT")); Тогда все операции, выполняемые с помощью объекта aGMTCalendar, будут выполняться с часовым поясом GMT и не будут иметь летнего времени или применены фиксированные смещения

Неправильно!

Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
aGMTCalendar.getTime(); //or getTimeInMillis()

и

Calendar aNotGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));aNotGMTCalendar.getTime();

вернутся одновременно. То же для

new Date(); //it's not GMT.
17
ответ дан 22 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: