compilator
@compilator
Senior Data Engineer

Как правильно получать время, установленное непосредственно на компьютере?

Время, получаемое через new Date() или же LocalDateTime.now(), на час больше, чем текущее время на компьютере. Что не так ?
ОС: корпоративная Windows 7 со всеми обновлениями, в домене. Версия джавы - 1.8.0_25.
  • Вопрос задан
  • 1764 просмотра
Решения вопроса 1
compilator
@compilator Автор вопроса
Senior Data Engineer
Таймзона по умолчанию возвращается - "Europe/Moscow", в параметрах системы (UTC+03:00) Moscow, St. Petersburg, Volgograd (RTZ 2).
Такое чувство, что java возвращает UTC+4

UDP: Проблема решалась тут javatalks.ru/topics/35236 и тут stackoverflow.com/questions/7066075/jvm-and-timezones

Выжимка:
Проблема в том, что jre некорректно определяет системный часовой пояс.
Решение:
при запуске программы передавать ключ -Duser.timezone=GMT+3 или использовать такой код:

TimeZone.setDefault(TimeZone.getTimeZone("GMT+3"));

Мне помогло. Отмечаю как решение!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Chvalov
@Chvalov
import java.text.DateFormat;
import java.text.SimpleDateFormat;
        import java.util.Calendar;
import java.util.Date;

public class Main {

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        System.out.println("Текуще время: " + sdf.format(cal.getTime()) );



        DateFormat df = new SimpleDateFormat("Дата: " + "yyyy.dd.MM" + "Время: " + "HH:mm:ss " + "Часовой пояс: X" + "День недели: u" ); //Формируем строку для вывода
        Date dateobj = new Date();
        System.out.println(df.format(dateobj));

       //Текущее время с использованием класса calendar
        Calendar calobj = Calendar.getInstance();
        System.out.println(df.format(calobj.getTime()));
    }
}


На выходе:
Текуще время: 17:40:07
Дата: 2015.05.11Время: 17:40:07 Часовой пояс: +02День недели: 4
Дата: 2015.05.11Время: 17:40:07 Часовой пояс: +02День недели: 4


UPD: Тогда так:
import java.io.*;

public class Main {

    public static void main(String[] args) {
        String command = "cmd /c time";

        try {
            Process process = Runtime.getRuntime().exec(command);

            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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