Как получить текущую дату и время вашего часового пояса в Java?
У меня есть приложение, размещенное на лондонском сервере. Я в Мадриде, Испания. Таким образом, часовой пояс составляет -2 часа.
Как я могу получить текущую дату/время в своем часовом поясе.
Date curr_date = new Date(System.currentTimeMillis());
например.
Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE"));
DateTimeZone zone = DateTimeZone.forID("Europe/Madrid");
DateTime dt = new DateTime(zone);
int day = dt.getDayOfMonth();
int year = dt.getYear();
int month = dt.getMonthOfYear();
int hours = dt.getHourOfDay();
int minutes = dt.getMinuteOfHour();
Ответы
Ответ 1
Date
всегда зависит от UTC... или нейтральной зоны времени в зависимости от того, как вы хотите ее просматривать. A Date
представляет только точку во времени; он не зависит от часового пояса, всего несколько миллисекунд с эпохи Unix. Нет понятия "локальный экземпляр Date
". Используйте Date
в сочетании с Calendar
и/или TimeZone.getDefault()
, чтобы использовать "локальный" часовой пояс. Используйте TimeZone.getTimeZone("Europe/Madrid")
, чтобы получить часовой пояс в Мадриде.
... или используйте Joda Time, который, как правило, делает все понятным, IMO. В Joda Time вы должны использовать значение DateTime
, которое является моментом времени в конкретной системе календаря и часовом поясе.
В Java 8 вы используете java.time.ZonedDateTime
, который является эквивалентом Java 8 Joda Time DateTime
.
Ответ 2
Как уже сказал Джон Скит, java.util.Date
не имеет часового пояса. Объект Date
представляет собой несколько миллисекунд с 1 января 1970 года, 12:00, UTC. Он не содержит информацию о часовом поясе.
Когда вы форматируете объект Date в строку, например, используя SimpleDateFormat
, вы можете установить часовой пояс на объекте DateFormat
, чтобы сообщить ему, в каком часовом поясе вы хотите отображать дату и время
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Use Madrid time zone to format the date in
df.setTimeZone(TimeZone.getTimeZone("Europe/Madrid"));
System.out.println("Date and time in Madrid: " + df.format(date));
Если вы хотите, чтобы локальный часовой пояс компьютера, на котором работает ваша программа, используйте:
df.setTimeZone(TimeZone.getDefault());
Ответ 3
с помощью Calendar прост:
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid"));
Date currentDate = calendar.getTime();
Ответ 4
С классами java.time, встроенными в Java 8 и позже:
public static void main(String[] args) {
LocalDateTime localNow = LocalDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId());
System.out.println(localNow);
// Prints current time of given zone without zone information : 2016-04-28T15:41:17.611
ZonedDateTime zoneNow = ZonedDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId());
System.out.println(zoneNow);
// Prints current time of given zone with zone information : 2016-04-28T15:41:17.627+02:00[Europe/Madrid]
}
Ответ 5
Проверьте это может быть полезно. У меня отлично работает. Кодекс также распространяется на летнее время
TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
Calendar cal = Calendar.getInstance();
// If needed in hours rather than milliseconds
int LocalOffSethrs = (int) ((cal.getTimeZone().getRawOffset()) *(2.77777778 /10000000));
int ChinaOffSethrs = (int) ((tz.getRawOffset()) *(2.77777778 /10000000));
int dts = cal.getTimeZone().getDSTSavings();
System.out.println("Local Time Zone : " + cal.getTimeZone().getDisplayName());
System.out.println("Local Day Light Time Saving : " + dts);
System.out.println("China Time : " + tz.getRawOffset());
System.out.println("Local Offset Time from GMT: " + LocalOffSethrs);
System.out.println("China Offset Time from GMT: " + ChinaOffSethrs);
// Adjust to GMT
cal.add(Calendar.MILLISECOND,-(cal.getTimeZone().getRawOffset()));
// Adjust to Daylight Savings
cal.add(Calendar.MILLISECOND, - cal.getTimeZone().getDSTSavings());
// Adjust to Offset
cal.add(Calendar.MILLISECOND, tz.getRawOffset());
Date dt = new Date(cal.getTimeInMillis());
System.out.println("After adjusting offset Acctual China Time :" + dt);
Ответ 6
Для этого вы использовали JodaTime. Java.util.Date очень ограничен относительно TimeZone.
Ответ 7
Я не мог заставить его работать с помощью Calendar. Вы должны использовать DateFormat
//Wednesday, July 20, 2011 3:54:44 PM PDT
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateTimeString = df.format(new Date());
//Wednesday, July 20, 2011
df = DateFormat.getDateInstance(DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateString = df.format(new Date());
//3:54:44 PM PDT
df = DateFormat.getTimeInstance(DateFormat.FULL);
df.setTimeZone(Timezone.getTimeZone("PST"));
final String timeString = df.format(new Date());
Ответ 8
Вот пример:
Calendar c = Calendar.getInstance(TimeZone.getDefault());
Date date = c.getTime();
Ответ 9
Вот несколько шагов для поиска времени для вашей зоны:
Date now = new Date();
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println("timeZone.......-->>>>>>"+df.format(now));
Ответ 10
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateTimeString = df.format(new Date());