ZonedDateTime e Instant en Java 8

¬ŅQu√© son ZonedDateTime e Instant en Java 8? Esta materia entra en el examen de Oracle para programadores profesionales (OCP), as√≠ que imag√≠nate lo importante que es.

More...

Si no tienes ni idea de cómo se gestionan las unidades de tiempo en Java, te recomiendo que le eches un vistazo a este otro artículo que escribí sobre LocalDateTime. Lo escribí con el examen anterior, el OCA, en mente.

¬ŅQu√© son ZonedDateTime e Instant en Java 8?

La diferencia entre LocalDateTime y ZonedDateTime es que esta √ļltima tiene en cuenta las zonas horarias. As√≠, si para crear un LocalDateTime te bastaba con tener un LocalDate y un LocalTime, para crear un objeto de tipo ZonedDateTime necesitar√°s, adem√°s, un ZoneId.

ZonedDateTime e Instant en Java: la clase de hoy

Un objeto de tipo Instant define un instante determinado en el tiempo, y contiene informaci√≥n sobre fecha y hora en GMT.

¬ŅC√≥mo instanciar un objeto de tipo ZonedDateTime?

Como ves, el ZoneId es una zona horaria. Puedes crearla introduciendo el nombre exacto de la zona horaria, o puedes utilizar la zona horaria predeterminada en el dispositivo:

Para ejecutar el código he utilizado ideone que, como ves, utiliza como zona horaria GMT (Greenwich Meridian Time).

Si utilizas un valor incorrecto (o una String vacía) a la hora de crear una ZoneId, tendrás un error en tiempo de ejecución. La lista completa de valores que puedes utilizar es la siguiente (es bien larga):

Lista completa de valores de ZoneId

Etc/GMT+12 (UTC-12:00)
Pacific/Pago_Pago (UTC-11:00)
Pacific/Samoa (UTC-11:00)
Pacific/Niue (UTC-11:00)
US/Samoa (UTC-11:00)
Etc/GMT+11 (UTC-11:00)
Pacific/Midway (UTC-11:00)
Pacific/Honolulu (UTC-10:00)
Pacific/Rarotonga (UTC-10:00)
Pacific/Tahiti (UTC-10:00)
Pacific/Johnston (UTC-10:00)
US/Hawaii (UTC-10:00)
SystemV/HST10 (UTC-10:00)
Etc/GMT+10 (UTC-10:00)
Pacific/Marquesas (UTC-09:30)
Etc/GMT+9 (UTC-09:00)
Pacific/Gambier (UTC-09:00)
America/Atka (UTC-09:00)
SystemV/YST9 (UTC-09:00)
America/Adak (UTC-09:00)
US/Aleutian (UTC-09:00)
Etc/GMT+8 (UTC-08:00)
US/Alaska (UTC-08:00)
America/Juneau (UTC-08:00)
America/Metlakatla (UTC-08:00)
America/Yakutat (UTC-08:00)
Pacific/Pitcairn (UTC-08:00)
America/Sitka (UTC-08:00)
America/Anchorage (UTC-08:00)
SystemV/PST8 (UTC-08:00)
America/Nome (UTC-08:00)
SystemV/YST9YDT (UTC-08:00)
Canada/Yukon (UTC-07:00)
US/Pacific-New (UTC-07:00)
Etc/GMT+7 (UTC-07:00)
US/Arizona (UTC-07:00)
America/Dawson_Creek (UTC-07:00)
Canada/Pacific (UTC-07:00)
PST8PDT (UTC-07:00)
SystemV/MST7 (UTC-07:00)
America/Dawson (UTC-07:00)
Mexico/BajaNorte (UTC-07:00)
America/Tijuana (UTC-07:00)
America/Creston (UTC-07:00)
America/Hermosillo (UTC-07:00)
America/Santa_Isabel (UTC-07:00)
America/Vancouver (UTC-07:00)
America/Ensenada (UTC-07:00)
America/Phoenix (UTC-07:00)
America/Whitehorse (UTC-07:00)
America/Fort_Nelson (UTC-07:00)
SystemV/PST8PDT (UTC-07:00)
America/Los_Angeles (UTC-07:00)
US/Pacific (UTC-07:00)
America/El_Salvador (UTC-06:00)
America/Guatemala (UTC-06:00)
America/Belize (UTC-06:00)
America/Managua (UTC-06:00)
America/Tegucigalpa (UTC-06:00)
Etc/GMT+6 (UTC-06:00)
Pacific/Easter (UTC-06:00)
Mexico/BajaSur (UTC-06:00)
America/Regina (UTC-06:00)
America/Denver (UTC-06:00)
Pacific/Galapagos (UTC-06:00)
America/Yellowknife (UTC-06:00)
America/Swift_Current (UTC-06:00)
America/Inuvik (UTC-06:00)
America/Mazatlan (UTC-06:00)
America/Boise (UTC-06:00)
America/Costa_Rica (UTC-06:00)
MST7MDT (UTC-06:00)
SystemV/CST6 (UTC-06:00)
America/Chihuahua (UTC-06:00)
America/Ojinaga (UTC-06:00)
Chile/EasterIsland (UTC-06:00)
US/Mountain (UTC-06:00)
America/Edmonton (UTC-06:00)
Canada/Mountain (UTC-06:00)
America/Cambridge_Bay (UTC-06:00)
Navajo (UTC-06:00)
SystemV/MST7MDT (UTC-06:00)
Canada/Saskatchewan (UTC-06:00)
America/Shiprock (UTC-06:00)
America/Panama (UTC-05:00)
America/Chicago (UTC-05:00)
America/Eirunepe (UTC-05:00)
Etc/GMT+5 (UTC-05:00)
Mexico/General (UTC-05:00)
America/Porto_Acre (UTC-05:00)
America/Guayaquil (UTC-05:00)
America/Rankin_Inlet (UTC-05:00)
US/Central (UTC-05:00)
America/Rainy_River (UTC-05:00)
America/Indiana/Knox (UTC-05:00)
America/North_Dakota/Beulah (UTC-05:00)
America/Monterrey (UTC-05:00)
America/Jamaica (UTC-05:00)
America/Atikokan (UTC-05:00)
America/Coral_Harbour (UTC-05:00)
America/North_Dakota/Center (UTC-05:00)
America/Cayman (UTC-05:00)
America/Indiana/Tell_City (UTC-05:00)
America/Mexico_City (UTC-05:00)
America/Matamoros (UTC-05:00)
CST6CDT (UTC-05:00)
America/Knox_IN (UTC-05:00)
America/Bogota (UTC-05:00)
America/Menominee (UTC-05:00)
America/Resolute (UTC-05:00)
SystemV/EST5 (UTC-05:00)
Canada/Central (UTC-05:00)
Brazil/Acre (UTC-05:00)
America/Cancun (UTC-05:00)
America/Lima (UTC-05:00)
America/Bahia_Banderas (UTC-05:00)
US/Indiana-Starke (UTC-05:00)
America/Rio_Branco (UTC-05:00)
SystemV/CST6CDT (UTC-05:00)
Jamaica (UTC-05:00)
America/Merida (UTC-05:00)
America/North_Dakota/New_Salem (UTC-05:00)
America/Winnipeg (UTC-05:00)
America/Cuiaba (UTC-04:00)
America/Marigot (UTC-04:00)
America/Indiana/Petersburg (UTC-04:00)
Chile/Continental (UTC-04:00)
America/Grand_Turk (UTC-04:00)
Cuba (UTC-04:00)
Etc/GMT+4 (UTC-04:00)
America/Manaus (UTC-04:00)
America/Fort_Wayne (UTC-04:00)
America/St_Thomas (UTC-04:00)
America/Anguilla (UTC-04:00)
America/Havana (UTC-04:00)
US/Michigan (UTC-04:00)
America/Barbados (UTC-04:00)
America/Louisville (UTC-04:00)
America/Curacao (UTC-04:00)
America/Guyana (UTC-04:00)
America/Martinique (UTC-04:00)
America/Puerto_Rico (UTC-04:00)
America/Port_of_Spain (UTC-04:00)
SystemV/AST4 (UTC-04:00)
America/Indiana/Vevay (UTC-04:00)
America/Indiana/Vincennes (UTC-04:00)
America/Kralendijk (UTC-04:00)
America/Antigua (UTC-04:00)
America/Indianapolis (UTC-04:00)
America/Iqaluit (UTC-04:00)
America/St_Vincent (UTC-04:00)
America/Kentucky/Louisville (UTC-04:00)
America/Dominica (UTC-04:00)
America/Asuncion (UTC-04:00)
EST5EDT (UTC-04:00)
America/Nassau (UTC-04:00)
America/Kentucky/Monticello (UTC-04:00)
Brazil/West (UTC-04:00)
America/Aruba (UTC-04:00)
America/Indiana/Indianapolis (UTC-04:00)
America/Santiago (UTC-04:00)
America/La_Paz (UTC-04:00)
America/Thunder_Bay (UTC-04:00)
America/Indiana/Marengo (UTC-04:00)
America/Blanc-Sablon (UTC-04:00)
America/Santo_Domingo (UTC-04:00)
US/Eastern (UTC-04:00)
Canada/Eastern (UTC-04:00)
America/Port-au-Prince (UTC-04:00)
America/St_Barthelemy (UTC-04:00)
America/Nipigon (UTC-04:00)
US/East-Indiana (UTC-04:00)
America/St_Lucia (UTC-04:00)
America/Montserrat (UTC-04:00)
America/Lower_Princes (UTC-04:00)
America/Detroit (UTC-04:00)
America/Tortola (UTC-04:00)
America/Porto_Velho (UTC-04:00)
America/Campo_Grande (UTC-04:00)
America/Virgin (UTC-04:00)
America/Pangnirtung (UTC-04:00)
America/Montreal (UTC-04:00)
America/Indiana/Winamac (UTC-04:00)
America/Boa_Vista (UTC-04:00)
America/Grenada (UTC-04:00)
America/New_York (UTC-04:00)
America/St_Kitts (UTC-04:00)
America/Caracas (UTC-04:00)
America/Guadeloupe (UTC-04:00)
America/Toronto (UTC-04:00)
SystemV/EST5EDT (UTC-04:00)
America/Argentina/Catamarca (UTC-03:00)
Canada/Atlantic (UTC-03:00)
America/Argentina/Cordoba (UTC-03:00)
America/Araguaina (UTC-03:00)
America/Argentina/Salta (UTC-03:00)
Etc/GMT+3 (UTC-03:00)
America/Montevideo (UTC-03:00)
Brazil/East (UTC-03:00)
America/Argentina/Mendoza (UTC-03:00)
America/Argentina/Rio_Gallegos (UTC-03:00)
America/Catamarca (UTC-03:00)
America/Cordoba (UTC-03:00)
America/Sao_Paulo (UTC-03:00)
America/Argentina/Jujuy (UTC-03:00)
America/Cayenne (UTC-03:00)
America/Recife (UTC-03:00)
America/Buenos_Aires (UTC-03:00)
America/Paramaribo (UTC-03:00)
America/Moncton (UTC-03:00)
America/Mendoza (UTC-03:00)
America/Santarem (UTC-03:00)
Atlantic/Bermuda (UTC-03:00)
America/Maceio (UTC-03:00)
Atlantic/Stanley (UTC-03:00)
America/Halifax (UTC-03:00)
Antarctica/Rothera (UTC-03:00)
America/Argentina/San_Luis (UTC-03:00)
America/Argentina/Ushuaia (UTC-03:00)
Antarctica/Palmer (UTC-03:00)
America/Punta_Arenas (UTC-03:00)
America/Glace_Bay (UTC-03:00)
America/Fortaleza (UTC-03:00)
America/Thule (UTC-03:00)
America/Argentina/La_Rioja (UTC-03:00)
America/Belem (UTC-03:00)
America/Jujuy (UTC-03:00)
America/Bahia (UTC-03:00)
America/Goose_Bay (UTC-03:00)
America/Argentina/San_Juan (UTC-03:00)
America/Argentina/ComodRivadavia (UTC-03:00)
America/Argentina/Tucuman (UTC-03:00)
America/Rosario (UTC-03:00)
SystemV/AST4ADT (UTC-03:00)
America/Argentina/Buenos_Aires (UTC-03:00)
America/St_Johns (UTC-02:30)
Canada/Newfoundland (UTC-02:30)
America/Miquelon (UTC-02:00)
Etc/GMT+2 (UTC-02:00)
America/Godthab (UTC-02:00)
America/Noronha (UTC-02:00)
Brazil/DeNoronha (UTC-02:00)
Atlantic/South_Georgia (UTC-02:00)
Etc/GMT+1 (UTC-01:00)
Atlantic/Cape_Verde (UTC-01:00)
Pacific/Kiritimati (UTC+14:00)
Etc/GMT-14 (UTC+14:00)
Pacific/Fakaofo (UTC+13:00)
Pacific/Enderbury (UTC+13:00)
Pacific/Apia (UTC+13:00)
Pacific/Tongatapu (UTC+13:00)
Etc/GMT-13 (UTC+13:00)
NZ-CHAT (UTC+12:45)
Pacific/Chatham (UTC+12:45)
Pacific/Kwajalein (UTC+12:00)
Antarctica/McMurdo (UTC+12:00)
Pacific/Wallis (UTC+12:00)
Pacific/Fiji (UTC+12:00)
Pacific/Funafuti (UTC+12:00)
Pacific/Nauru (UTC+12:00)
Kwajalein (UTC+12:00)
NZ (UTC+12:00)
Pacific/Wake (UTC+12:00)
Antarctica/South_Pole (UTC+12:00)
Pacific/Tarawa (UTC+12:00)
Pacific/Auckland (UTC+12:00)
Asia/Kamchatka (UTC+12:00)
Etc/GMT-12 (UTC+12:00)
Asia/Anadyr (UTC+12:00)
Pacific/Majuro (UTC+12:00)
Pacific/Ponape (UTC+11:00)
Pacific/Bougainville (UTC+11:00)
Antarctica/Macquarie (UTC+11:00)
Pacific/Pohnpei (UTC+11:00)
Pacific/Efate (UTC+11:00)
Pacific/Norfolk (UTC+11:00)
Asia/Magadan (UTC+11:00)
Pacific/Kosrae (UTC+11:00)
Asia/Sakhalin (UTC+11:00)
Pacific/Noumea (UTC+11:00)
Etc/GMT-11 (UTC+11:00)
Asia/Srednekolymsk (UTC+11:00)
Pacific/Guadalcanal (UTC+11:00)
Australia/Lord_Howe (UTC+10:30)
Australia/LHI (UTC+10:30)
Australia/Hobart (UTC+10:00)
Pacific/Yap (UTC+10:00)
Australia/Tasmania (UTC+10:00)
Pacific/Port_Moresby (UTC+10:00)
Australia/ACT (UTC+10:00)
Australia/Victoria (UTC+10:00)
Pacific/Chuuk (UTC+10:00)
Australia/Queensland (UTC+10:00)
Australia/Canberra (UTC+10:00)
Australia/Currie (UTC+10:00)
Pacific/Guam (UTC+10:00)
Pacific/Truk (UTC+10:00)
Australia/NSW (UTC+10:00)
Asia/Vladivostok (UTC+10:00)
Pacific/Saipan (UTC+10:00)
Antarctica/DumontDUrville (UTC+10:00)
Australia/Sydney (UTC+10:00)
Australia/Brisbane (UTC+10:00)
Etc/GMT-10 (UTC+10:00)
Asia/Ust-Nera (UTC+10:00)
Australia/Melbourne (UTC+10:00)
Australia/Lindeman (UTC+10:00)
Australia/North (UTC+09:30)
Australia/Yancowinna (UTC+09:30)
Australia/Adelaide (UTC+09:30)
Australia/Broken_Hill (UTC+09:30)
Australia/South (UTC+09:30)
Australia/Darwin (UTC+09:30)
Etc/GMT-9 (UTC+09:00)
Pacific/Palau (UTC+09:00)
Asia/Chita (UTC+09:00)
Asia/Dili (UTC+09:00)
Asia/Jayapura (UTC+09:00)
Asia/Yakutsk (UTC+09:00)
Asia/Pyongyang (UTC+09:00)
ROK (UTC+09:00)
Asia/Seoul (UTC+09:00)
Asia/Khandyga (UTC+09:00)
Japan (UTC+09:00)
Asia/Tokyo (UTC+09:00)
Australia/Eucla (UTC+08:45)
Asia/Kuching (UTC+08:00)
Asia/Chungking (UTC+08:00)
Etc/GMT-8 (UTC+08:00)
Australia/Perth (UTC+08:00)
Asia/Macao (UTC+08:00)
Asia/Macau (UTC+08:00)
Asia/Choibalsan (UTC+08:00)
Asia/Shanghai (UTC+08:00)
Antarctica/Casey (UTC+08:00)
Asia/Ulan_Bator (UTC+08:00)
Asia/Chongqing (UTC+08:00)
Asia/Ulaanbaatar (UTC+08:00)
Asia/Taipei (UTC+08:00)
Asia/Manila (UTC+08:00)
PRC (UTC+08:00)
Asia/Ujung_Pandang (UTC+08:00)
Asia/Harbin (UTC+08:00)
Singapore (UTC+08:00)
Asia/Brunei (UTC+08:00)
Australia/West (UTC+08:00)
Asia/Hong_Kong (UTC+08:00)
Asia/Makassar (UTC+08:00)
Hongkong (UTC+08:00)
Asia/Kuala_Lumpur (UTC+08:00)
Asia/Irkutsk (UTC+08:00)
Asia/Singapore (UTC+08:00)
Asia/Pontianak (UTC+07:00)
Etc/GMT-7 (UTC+07:00)
Asia/Phnom_Penh (UTC+07:00)
Asia/Novosibirsk (UTC+07:00)
Antarctica/Davis (UTC+07:00)
Asia/Tomsk (UTC+07:00)
Asia/Jakarta (UTC+07:00)
Asia/Barnaul (UTC+07:00)
Indian/Christmas (UTC+07:00)
Asia/Ho_Chi_Minh (UTC+07:00)
Asia/Hovd (UTC+07:00)
Asia/Bangkok (UTC+07:00)
Asia/Vientiane (UTC+07:00)
Asia/Novokuznetsk (UTC+07:00)
Asia/Krasnoyarsk (UTC+07:00)
Asia/Saigon (UTC+07:00)
Asia/Yangon (UTC+06:30)
Asia/Rangoon (UTC+06:30)
Indian/Cocos (UTC+06:30)
Asia/Kashgar (UTC+06:00)
Etc/GMT-6 (UTC+06:00)
Asia/Almaty (UTC+06:00)
Asia/Dacca (UTC+06:00)
Asia/Omsk (UTC+06:00)
Asia/Dhaka (UTC+06:00)
Indian/Chagos (UTC+06:00)
Asia/Qyzylorda (UTC+06:00)
Asia/Bishkek (UTC+06:00)
Antarctica/Vostok (UTC+06:00)
Asia/Urumqi (UTC+06:00)
Asia/Thimbu (UTC+06:00)
Asia/Thimphu (UTC+06:00)
Asia/Kathmandu (UTC+05:45)
Asia/Katmandu (UTC+05:45)
Asia/Kolkata (UTC+05:30)
Asia/Colombo (UTC+05:30)
Asia/Calcutta (UTC+05:30)
Asia/Aqtau (UTC+05:00)
Etc/GMT-5 (UTC+05:00)
Asia/Samarkand (UTC+05:00)
Asia/Karachi (UTC+05:00)
Asia/Yekaterinburg (UTC+05:00)
Asia/Dushanbe (UTC+05:00)
Indian/Maldives (UTC+05:00)
Asia/Oral (UTC+05:00)
Asia/Tashkent (UTC+05:00)
Antarctica/Mawson (UTC+05:00)
Asia/Aqtobe (UTC+05:00)
Asia/Ashkhabad (UTC+05:00)
Asia/Ashgabat (UTC+05:00)
Asia/Atyrau (UTC+05:00)
Indian/Kerguelen (UTC+05:00)
Iran (UTC+04:30)
Asia/Tehran (UTC+04:30)
Asia/Kabul (UTC+04:30)
Asia/Yerevan (UTC+04:00)
Etc/GMT-4 (UTC+04:00)
Asia/Dubai (UTC+04:00)
Indian/Reunion (UTC+04:00)
Indian/Mauritius (UTC+04:00)
Europe/Saratov (UTC+04:00)
Europe/Samara (UTC+04:00)
Indian/Mahe (UTC+04:00)
Asia/Baku (UTC+04:00)
Asia/Muscat (UTC+04:00)
Europe/Volgograd (UTC+04:00)
Europe/Astrakhan (UTC+04:00)
Asia/Tbilisi (UTC+04:00)
Europe/Ulyanovsk (UTC+04:00)
Asia/Aden (UTC+03:00)
Africa/Nairobi (UTC+03:00)
Europe/Istanbul (UTC+03:00)
Etc/GMT-3 (UTC+03:00)
Europe/Zaporozhye (UTC+03:00)
Israel (UTC+03:00)
Indian/Comoro (UTC+03:00)
Antarctica/Syowa (UTC+03:00)
Africa/Mogadishu (UTC+03:00)
Europe/Bucharest (UTC+03:00)
Africa/Asmera (UTC+03:00)
Europe/Mariehamn (UTC+03:00)
Asia/Istanbul (UTC+03:00)
Europe/Tiraspol (UTC+03:00)
Europe/Moscow (UTC+03:00)
Europe/Chisinau (UTC+03:00)
Europe/Helsinki (UTC+03:00)
Asia/Beirut (UTC+03:00)
Asia/Tel_Aviv (UTC+03:00)
Africa/Djibouti (UTC+03:00)
Europe/Simferopol (UTC+03:00)
Europe/Sofia (UTC+03:00)
Asia/Gaza (UTC+03:00)
Africa/Asmara (UTC+03:00)
Europe/Riga (UTC+03:00)
Asia/Baghdad (UTC+03:00)
Asia/Damascus (UTC+03:00)
Africa/Dar_es_Salaam (UTC+03:00)
Africa/Addis_Ababa (UTC+03:00)
Europe/Uzhgorod (UTC+03:00)
Asia/Jerusalem (UTC+03:00)
Asia/Riyadh (UTC+03:00)
Asia/Kuwait (UTC+03:00)
Europe/Kirov (UTC+03:00)
Africa/Kampala (UTC+03:00)
Europe/Minsk (UTC+03:00)
Asia/Qatar (UTC+03:00)
Europe/Kiev (UTC+03:00)
Asia/Bahrain (UTC+03:00)
Europe/Vilnius (UTC+03:00)
Indian/Antananarivo (UTC+03:00)
Indian/Mayotte (UTC+03:00)
Europe/Tallinn (UTC+03:00)
Turkey (UTC+03:00)
Africa/Juba (UTC+03:00)
Asia/Nicosia (UTC+03:00)
Asia/Famagusta (UTC+03:00)
W-SU (UTC+03:00)
EET (UTC+03:00)
Asia/Hebron (UTC+03:00)
Asia/Amman (UTC+03:00)
Europe/Nicosia (UTC+03:00)
Europe/Athens (UTC+03:00)
Africa/Cairo (UTC+02:00)
Africa/Mbabane (UTC+02:00)
Europe/Brussels (UTC+02:00)
Europe/Warsaw (UTC+02:00)
CET (UTC+02:00)
Europe/Luxembourg (UTC+02:00)
Etc/GMT-2 (UTC+02:00)
Libya (UTC+02:00)
Africa/Kigali (UTC+02:00)
Africa/Tripoli (UTC+02:00)
Europe/Kaliningrad (UTC+02:00)
Africa/Windhoek (UTC+02:00)
Europe/Malta (UTC+02:00)
Europe/Busingen (UTC+02:00)
Europe/Skopje (UTC+02:00)
Europe/Sarajevo (UTC+02:00)
Europe/Rome (UTC+02:00)
Europe/Zurich (UTC+02:00)
Europe/Gibraltar (UTC+02:00)
Africa/Lubumbashi (UTC+02:00)
Europe/Vaduz (UTC+02:00)
Europe/Ljubljana (UTC+02:00)
Europe/Berlin (UTC+02:00)
Europe/Stockholm (UTC+02:00)
Europe/Budapest (UTC+02:00)
Europe/Zagreb (UTC+02:00)
Europe/Paris (UTC+02:00)
Africa/Ceuta (UTC+02:00)
Europe/Prague (UTC+02:00)
Antarctica/Troll (UTC+02:00)
Africa/Gaborone (UTC+02:00)
Europe/Copenhagen (UTC+02:00)
Europe/Vienna (UTC+02:00)
Europe/Tirane (UTC+02:00)
MET (UTC+02:00)
Europe/Amsterdam (UTC+02:00)
Africa/Maputo (UTC+02:00)
Europe/San_Marino (UTC+02:00)
Poland (UTC+02:00)
Europe/Andorra (UTC+02:00)
Europe/Oslo (UTC+02:00)
Europe/Podgorica (UTC+02:00)
Africa/Bujumbura (UTC+02:00)
Atlantic/Jan_Mayen (UTC+02:00)
Africa/Maseru (UTC+02:00)
Europe/Madrid (UTC+02:00)
Africa/Blantyre (UTC+02:00)
Africa/Lusaka (UTC+02:00)
Africa/Harare (UTC+02:00)
Africa/Khartoum (UTC+02:00)
Africa/Johannesburg (UTC+02:00)
Europe/Belgrade (UTC+02:00)
Europe/Bratislava (UTC+02:00)
Arctic/Longyearbyen (UTC+02:00)
Egypt (UTC+02:00)
Europe/Vatican (UTC+02:00)
Europe/Monaco (UTC+02:00)
Europe/London (UTC+01:00)
Etc/GMT-1 (UTC+01:00)
Europe/Jersey (UTC+01:00)
Europe/Guernsey (UTC+01:00)
Europe/Isle_of_Man (UTC+01:00)
Africa/Tunis (UTC+01:00)
Africa/Malabo (UTC+01:00)
GB-Eire (UTC+01:00)
Africa/Lagos (UTC+01:00)
Africa/Algiers (UTC+01:00)
GB (UTC+01:00)
Portugal (UTC+01:00)
Africa/Sao_Tome (UTC+01:00)
Africa/Ndjamena (UTC+01:00)
Atlantic/Faeroe (UTC+01:00)
Eire (UTC+01:00)
Atlantic/Faroe (UTC+01:00)
Europe/Dublin (UTC+01:00)
Africa/Libreville (UTC+01:00)
Africa/El_Aaiun (UTC+01:00)
Africa/Douala (UTC+01:00)
Africa/Brazzaville (UTC+01:00)
Africa/Porto-Novo (UTC+01:00)
Atlantic/Madeira (UTC+01:00)
Europe/Lisbon (UTC+01:00)
Atlantic/Canary (UTC+01:00)
Africa/Casablanca (UTC+01:00)
Europe/Belfast (UTC+01:00)
Africa/Luanda (UTC+01:00)
Africa/Kinshasa (UTC+01:00)
Africa/Bangui (UTC+01:00)
WET (UTC+01:00)
Africa/Niamey (UTC+01:00)
GMT (UTC+00:00)
Etc/GMT-0 (UTC+00:00)
Atlantic/St_Helena (UTC+00:00)
Etc/GMT+0 (UTC+00:00)
Africa/Banjul (UTC+00:00)
Etc/GMT (UTC+00:00)
Africa/Freetown (UTC+00:00)
Africa/Bamako (UTC+00:00)
Africa/Conakry (UTC+00:00)
Universal (UTC+00:00)
Africa/Nouakchott (UTC+00:00)
UTC (UTC+00:00)
Etc/Universal (UTC+00:00)
Atlantic/Azores (UTC+00:00)
Africa/Abidjan (UTC+00:00)
Africa/Accra (UTC+00:00)
Etc/UCT (UTC+00:00)
GMT0 (UTC+00:00)
Zulu (UTC+00:00)
Africa/Ouagadougou (UTC+00:00)
Atlantic/Reykjavik (UTC+00:00)
Etc/Zulu (UTC+00:00)
Iceland (UTC+00:00)
Africa/Lome (UTC+00:00)
Greenwich (UTC+00:00)
Etc/GMT0 (UTC+00:00)
America/Danmarkshavn (UTC+00:00)
Africa/Dakar (UTC+00:00)
America/Scoresbysund (UTC+00:00)
Africa/Bissau (UTC+00:00)
Etc/Greenwich (UTC+00:00)
Africa/Timbuktu (UTC+00:00)
UCT (UTC+00:00)
Africa/Monrovia (UTC+00:00)
Etc/UTC (UTC+00:00)

Total Zone IDs 599

Resumiendo: para crear un ZonedDateTime necesitas, adem√°s de un LocalDateTime (o, por separado, un LocalDate y un LocalTime, como en el ejemplo de arriba), un ZoneId (una zona horaria).

Ten en cuenta que aquí hay una trampa: puedes crear un LocalDate utilizando tanto un int que indique el mes, como un enum:

No obstante, si quieres crear un objeto de tipo ZonedDateTime desde sus elementos b√°sicos (a√Īo, mes, d√≠a, hora, minutos, segundos, nanos y ZoneId), no puedes utilizar el enum:

¬ŅC√≥mo funciona Instant en Java 8?

Un Instant transforma un objeto de tipo ZonedTimeDate en un instante de tiempo que muestra la hora GMT. Te lo explico mejor con el siguiente ejemplo:

Como ves,  en la zona horaria Europe/Madrid son las 14 horas, y est√° a una distancia de 2 horas de la hora en GMT. Por ello, en Instant se le restan dos horas.

Como ves, cuando se imprime un Instant aparece una T entre el día y la hora, y una Z al final.

Operaciones con Instants

A los objetos de tipo Instant se les puede sumar o restar fracciones de tiempo de un día, o menores, con los métodos plus() y minus():

Como ves, los objetos de tipo Instant son inmutables; es decir, si quieres modificar un Instant tendr√°s que reasignar el nuevo objeto.

Los m√©todos plus y minus aceptan dos argumentos: 

  • Un valor long, que expresa el n√ļmero de unidades que vas a sumar o restar, y
  • Un TemporalUnit, un enum que expresa el tipo de unidad.

Para utilizar TemporalUnit no olvides que debes importar el paquete java.time.temporal.*. Los valores que contiene TemporalUnit son los siguientes:

Lista completa de valores de TemporalUnit

Valores que puedes utilizar para modificar objetos de tipo Instant:

ChronoUnit.NANOS
ChronoUnit.MICROS
ChronoUnit.MILLIS
ChronoUnit.SECONDS
ChronoUnit.MINUTES
ChronoUnit.HOURS
ChronoUnit.HALF_DAYS
ChronoUnit.DAYS

‚ÄčValores que NO puedes utilizar objetos de tipo Instant:
ChronoUnit.WEEKS
ChronoUnit.MONTHS
ChronoUnit.YEARS
ChronoUnit.DECADES
ChronoUnit.CENTURIES
ChronoUnit.MILLENNIA
ChronoUnit.ERAS
ChronoUnit.FOREVER

Ejercicios recomendados

Y llegamos al final: ya has aprendido la teoría de lo que son ZonedDateTime e Instant en Java.

En primer lugar, como siempre, practica todo lo anterior. No te olvides de importar los paquetes necesarios cada vez.

En segundo lugar, te propongo que pienses en los cambios de hora que ocurren dos veces al a√Īo en muchos pa√≠ses. Java los tiene en cuenta, as√≠ que crea un objeto de tipo ZonedDateTime con una de las fechas en las que se cambia la hora (en Espa√Īa, como en muchos otros pa√≠ses, se sum√≥ una hora en la madrugada del 29 de marzo de 2020: se pas√≥ de la 1:59 a las 3:00 de la ma√Īana) y opera con ella.

¬ŅQu√© pasa si le sumas un d√≠a? ¬ŅY si le sumas 24 horas? ¬ŅEs el mismo el resultado en ambos casos?

¬ŅQu√© te ha parecido este art√≠culo sobre ZonedDateTime e Instant en Java? ¬°Espero que te resulte √ļtil, y no dudes en preguntar tus dudas en la caja de comentarios!

Deja una respuesta 0 comentarios

Utilizamos cookies propias y de terceros para realizar el an√°lisis de la navegaci√≥n de los usuarios y mejorar nuestros servicios. Si contin√ļa navegando, consideramos que acepta su uso. Puede cambiar la configuraci√≥n u obtener m√°s informaci√≥n en nuestra pol√≠tica de cookies. ACEPTAR

Aviso de cookies