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

У меня есть приложение, размещенное на лондонском сервере. Я в Мадриде, Испания. Таким образом, часовой пояс составляет -2 часа.

Как я могу получить текущую дату / время в своем часовом поясе.

Date curr_date = new Date(System.currentTimeMillis()); 

например

 Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE")); 

С Joda-Time

 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(); 

Date всегда UTC-based … или нейтральная зона времени, в зависимости от того, как вы хотите ее просматривать. Date представляет только момент времени; он не зависит от часового пояса, всего несколько миллисекунд с эпохи Unix. Нет понятия «локальный экземпляр Date ». Используйте Date в сочетании с Calendar и / или TimeZone.getDefault() чтобы использовать «местный» часовой пояс. Используйте TimeZone.getTimeZone("Europe/Madrid") чтобы получить часовой пояс в Мадриде.

… или использовать Joda Time , которое, как правило, делает все понятным, IMO. В Joda Time вы должны использовать значение DateTime , которое является моментом времени в конкретной системе календаря и часовом поясе .

В Java 8 вы используете java.time.ZonedDateTime , который является эквивалентом Java 8 DateTime Joda Time.

Как уже сказал Jon Skeet, 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's 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()); 

использование Календаря прост:

 Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid")); Date currentDate = calendar.getTime(); 

Проверьте, что это может быть полезно. Работа для меня прекрасна. Код также охватывает летнее время

  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); 

С помощью classов 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] } 

Для этого вы бы использовали JodaTime . Java.util.Date очень ограничен в отношении TimeZone.

Я не мог заставить его работать с помощью 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()); 

Вот пример:

 Calendar c = Calendar.getInstance(TimeZone.getDefault()); Date date = c.getTime(); 

Вот несколько шагов для поиска времени для вашей зоны:

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)); 
 DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); df.setTimeZone(TimeZone.getTimeZone("PST")); final String dateTimeString = df.format(new Date()); 
  • iOS: конвертировать UTC NSDate в локальный часовой пояс
  • Игнорирование часовых поясов в Rails и PostgreSQL
  • Как получить часовой пояс из местоположения с использованием координат широты и долготы?
  • Как справиться с летней экономией, используя TimeZone в Java
  • Преобразование между локальными временами и GMT / UTC в C / C ++
  • .NET TimeZoneInfo из часового пояса Олсона
  • Драйвер JDBC MySQL 5.1.33 - Проблема с часовым поясом
  • Как использовать пользовательское время в браузере для проверки разницы во времени между клиентом и сервером
  • Параметр DateTime с часовым поясом формы PST / CEST / UTC / etc.
  • Часовой пояс с рельсами 3
  • Как конвертировать дату с одного часового пояса в другой часовой пояс
  • Давайте будем гением компьютера.