From 6b1989853cc568474709a54473b440b242eb0df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Mon, 24 Jul 2017 16:12:26 +0000 Subject: [PATCH 01/18] adding aptitude cheat sheet --- share/goodie/cheat_sheets/json/aptitude.json | 157 +++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 share/goodie/cheat_sheets/json/aptitude.json diff --git a/share/goodie/cheat_sheets/json/aptitude.json b/share/goodie/cheat_sheets/json/aptitude.json new file mode 100644 index 00000000000..f0b53f68803 --- /dev/null +++ b/share/goodie/cheat_sheets/json/aptitude.json @@ -0,0 +1,157 @@ +{ + "id": "aptitude_cheat_sheet", + "name": "aptitude", + "description": "Basic shortcuts for Aptitude, an Ncurses based interface for Apt", + + "metadata": { + "sourceName": "Debian", + "sourceUrl" : "https://aptitude.alioth.debian.org/doc/en/index.html" + }, + + "template_type": "keyboard", + + "section_order": [ + "Basics", + "Search patterns", + "Package management and conflict resolution" + ], + + "sections": { + "Basics": [ + { + "key": "u", + "val": "Update package list" + }, + { + "key": "U", + "val": "Mark all packages with updates" + }, + { + "key": "/", + "val": "Find a package" + }, + { + "key": "n", + "val": "Find next package matching a search " + }, + { + "key": "N", + "val": "Find next package backward matching a search " + }, + { + "key": "+", + "val": "Mark a package for installation" + }, + { + "key": "-", + "val": "Mark a package for removal" + }, + { + "key": "g", + "val": "Install/remove marked packages" + }, + { + "key": "q", + "val": "Quit aptitude" + } + ], + "Search patterns": [ + { + "key": " or ~n", + "val": "Packages whose name contains " + }, + { + "key": "!", + "val": "Packages whose name does not contain " + }, + { + "key": "~i", + "val": "Installed packages whose name contains " + }, + { + "key": "^", + "val": "Packages whose name starts with " + }, + { + "key": "$", + "val": "Packages whose name ends with " + }, + { + "key": "~c", + "val": "Removed packages with residual configuration files" + }, + { + "key": "~v", + "val": "Virtual packages whose name contains " + }, + { + "key": "~d", + "val": "Packages whose description contains " + }, + { + "key": "~D", + "val": "Packages which depend on " + }, + { + "key": "~R", + "val": "Dependencies of the package " + } + ], + "Package management": [ + { + "key": "L", + "val": "Mark a package for reinstallation" + }, + { + "key": "_", + "val": "Mark a package and its configuration files for removal" + }, + { + "key": ":", + "val": "Keep a package in its current version" + }, + { + "key": "=", + "val": "Prevent upgrades of a package" + }, + { + "key": "M", + "val": "Mark a package as automatically installed" + }, + { + "key": "m", + "val": "Mark a package as manually installed" + }, + { + "key": "F", + "val": "Forbid a package version from being installed" + } + ], + "Conflict resolution": [ + { + "key": "e", + "val": "Examine a solution" + }, + { + "key": "!", + "val": "Apply a solution" + }, + { + "key": ".", + "val": "Next solution" + }, + { + "key": ",", + "val": "Previous solution" + }, + { + "key": "<", + "val": "First solution" + }, + { + "key": ">", + "val": "Last solution" + } + ] + } +} \ No newline at end of file From 30c7529731b100df4c1b5a978f35ef81dcc2e80b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Mon, 24 Jul 2017 21:14:59 +0000 Subject: [PATCH 02/18] Coherence between section list and sections --- share/goodie/cheat_sheets/json/aptitude.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/share/goodie/cheat_sheets/json/aptitude.json b/share/goodie/cheat_sheets/json/aptitude.json index f0b53f68803..8be74324c48 100644 --- a/share/goodie/cheat_sheets/json/aptitude.json +++ b/share/goodie/cheat_sheets/json/aptitude.json @@ -13,7 +13,8 @@ "section_order": [ "Basics", "Search patterns", - "Package management and conflict resolution" + "Package management", + "Conflict resolution" ], "sections": { From 8ed11d7f4df6e77fa4716ad93112454a0785acd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Mon, 24 Jul 2017 21:21:58 +0000 Subject: [PATCH 03/18] minor typo --- share/goodie/cheat_sheets/json/aptitude.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/goodie/cheat_sheets/json/aptitude.json b/share/goodie/cheat_sheets/json/aptitude.json index 8be74324c48..64d8e788176 100644 --- a/share/goodie/cheat_sheets/json/aptitude.json +++ b/share/goodie/cheat_sheets/json/aptitude.json @@ -53,12 +53,12 @@ }, { "key": "q", - "val": "Quit aptitude" + "val": "Quit" } ], "Search patterns": [ { - "key": " or ~n", + "key": "", "val": "Packages whose name contains " }, { From c5ecf431e8b2e65995784c5e69b19783f777504d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Mon, 24 Jul 2017 21:25:35 +0000 Subject: [PATCH 04/18] added a link towards Debian reference --- share/goodie/cheat_sheets/json/aptitude.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/goodie/cheat_sheets/json/aptitude.json b/share/goodie/cheat_sheets/json/aptitude.json index 64d8e788176..f2f96e2c628 100644 --- a/share/goodie/cheat_sheets/json/aptitude.json +++ b/share/goodie/cheat_sheets/json/aptitude.json @@ -4,8 +4,8 @@ "description": "Basic shortcuts for Aptitude, an Ncurses based interface for Apt", "metadata": { - "sourceName": "Debian", - "sourceUrl" : "https://aptitude.alioth.debian.org/doc/en/index.html" + "sourceName": "Debian reference", + "sourceUrl" : "https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_interactive_use_of_aptitude" }, "template_type": "keyboard", From 627e817eda32eca0228611a2b8b2ec81fd5dcb9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Fri, 25 Aug 2017 11:59:54 +0000 Subject: [PATCH 05/18] Added a yaml file containing timezone abbreviations. --- share/goodie/timezonetime/abbreviations.yaml | 694 +++++++++++++++++++ 1 file changed, 694 insertions(+) create mode 100644 share/goodie/timezonetime/abbreviations.yaml diff --git a/share/goodie/timezonetime/abbreviations.yaml b/share/goodie/timezonetime/abbreviations.yaml new file mode 100644 index 00000000000..a799573b010 --- /dev/null +++ b/share/goodie/timezonetime/abbreviations.yaml @@ -0,0 +1,694 @@ +--- +A: + - name: Alpha Time Zone + offset: +1:00 +ACDT: + - name: Australian Central Daylight Time + offset: +10:30 +ACST: + - name: Australian Central Standard Time + offset: +9:30 +ACT: + - name: Acre Time + offset: -5:00 +ACWST: + - name: Australian Central Western Standard Time + offset: +8:45 +ADT: + - name: Arabia Daylight Time + offset: +3:00 + - name: Atlantic Daylight Time + offset: -3:00 +AEDT: + - name: Australian Eastern Daylight Time + offset: +11:00 +AEST: + - name: Australian Eastern Standard Time + offset: +10:00 +AFT: + - name: Afghanistan Time + offset: +4:30 +AKDT: + - name: Alaska Daylight Time + offset: -8:00 +AKST: + - name: Alaska Standard Time + offset: -9:00 +ALMT: + - name: Alma-Ata Time + offset: +6:00 +AMST: + - name: Amazon Summer Time + offset: -3:00 + - name: Armenia Summer Time + offset: +5:00 +AMT: + - name: Amazon Time + offset: -4:00 + - name: Armenia Time + offset: +4:00 +ANAST: + - name: Anadyr Summer Time + offset: +12:00 +ANAT: + - name: Anadyr Time + offset: +12:00 +AQTT: + - name: Aqtobe Time + offset: +5:00 +ART: + - name: Argentina Time + offset: -3:00 +AST: + - name: Arabia Standard Time + offset: +3:00 + - name: Atlantic Standard Time + offset: -4:00 +AWDT: + - name: Australian Western Daylight Time + offset: +9:00 +AWST: + - name: Australian Western Standard Time + offset: +8:00 +AZOST: + - name: Azores Summer Time + offset: +0:00 +AZOT: + - name: Azores Time + offset: -1:00 +AZST: + - name: Azerbaijan Summer Time + offset: +5:00 +AZT: + - name: Azerbaijan Time + offset: +4:00 +AoE: + - name: Anywhere on Earth + offset: -12:00 +B: + - name: Bravo Time Zone + offset: +2:00 +BNT: + - name: Brunei Darussalam Time + offset: +8:00 +BOT: + - name: Bolivia Time + offset: -4:00 +BRST: + - name: Brasília Summer Time + offset: -2:00 +BRT: + - name: Brasília Time + offset: -3:00 +BST: + - name: Bangladesh Standard Time + offset: +6:00 + - name: Bougainville Standard Time + offset: +11:00 + - name: British Summer Time + offset: +1:00 +BTT: + - name: Bhutan Time + offset: +6:00 +C: + - name: Charlie Time Zone + offset: +3:00 +CAST: + - name: Casey Time + offset: +8:00 +CAT: + - name: Central Africa Time + offset: +2:00 +CCT: + - name: Cocos Islands Time + offset: +6:30 +CDT: + - name: Central Daylight Time + offset: -5:00 + - name: Cuba Daylight Time + offset: -4:00 +CEST: + - name: Central European Summer Time + offset: +2:00 +CET: + - name: Central European Time + offset: +1:00 +CHADT: + - name: Chatham Island Daylight Time + offset: +13:45 +CHAST: + - name: Chatham Island Standard Time + offset: +12:45 +CHOST: + - name: Choibalsan Summer Time + offset: +9:00 +CHOT: + - name: Choibalsan Time + offset: +8:00 +CHUT: + - name: Chuuk Time + offset: +10:00 +CIDST: + - name: Cayman Islands Daylight Saving Time + offset: -4:00 +CIST: + - name: Cayman Islands Standard Time + offset: -5:00 +CKT: + - name: Cook Island Time + offset: -10:00 +CLST: + - name: Chile Summer Time + offset: -3:00 +CLT: + - name: Chile Standard Time + offset: -4:00 +COT: + - name: Colombia Time + offset: -5:00 +CST: + - name: Central Standard Time + offset: -6:00 + - name: China Standard Time + offset: +8:00 + - name: Cuba Standard Time + offset: -5:00 +CVT: + - name: Cape Verde Time + offset: -1:00 +CXT: + - name: Christmas Island Time + offset: +7:00 +ChST: + - name: Chamorro Standard Time + offset: +10:00 +D: + - name: Delta Time Zone + offset: +4:00 +DAVT: + - name: Davis Time + offset: +7:00 +DDUT: + - name: Dumont-d'Urville Time + offset: +10:00 +E: + - name: Echo Time Zone + offset: +5:00 +EASST: + - name: Easter Island Summer Time + offset: -5:00 +EAST: + - name: Easter Island Standard Time + offset: -6:00 +EAT: + - name: Eastern Africa Time + offset: +3:00 +ECT: + - name: Ecuador Time + offset: -5:00 +EDT: + - name: Eastern Daylight Time + offset: -4:00 +EEST: + - name: Eastern European Summer Time + offset: +3:00 +EET: + - name: Eastern European Time + offset: +2:00 +EGST: + - name: Eastern Greenland Summer Time + offset: +0:00 +EGT: + - name: East Greenland Time + offset: -1:00 +EST: + - name: Eastern Standard Time + offset: -5:00 +F: + - name: Foxtrot Time Zone + offset: +6:00 +FET: + - name: Further-Eastern European Time + offset: +3:00 +FJST: + - name: Fiji Summer Time + offset: +13:00 +FJT: + - name: Fiji Time + offset: +12:00 +FKST: + - name: Falkland Islands Summer Time + offset: -3:00 +FKT: + - name: Falkland Island Time + offset: -4:00 +FNT: + - name: Fernando de Noronha Time + offset: -2:00 +G: + - name: Golf Time Zone + offset: +7:00 +GALT: + - name: Galapagos Time + offset: -6:00 +GAMT: + - name: Gambier Time + offset: -9:00 +GET: + - name: Georgia Standard Time + offset: +4:00 +GFT: + - name: French Guiana Time + offset: -3:00 +GILT: + - name: Gilbert Island Time + offset: +12:00 +GMT: + - name: Greenwich Mean Time + offset: +0:00 +GST: + - name: Gulf Standard Time + offset: +4:00 + - name: South Georgia Time + offset: -2:00 +GYT: + - name: Guyana Time + offset: -4:00 +H: + - name: Hotel Time Zone + offset: +8:00 +HADT: + - name: Hawaii-Aleutian Daylight Time + offset: -9:00 +HAST: + - name: Hawaii-Aleutian Standard Time + offset: -10:00 +HKT: + - name: Hong Kong Time + offset: +8:00 +HOVST: + - name: Hovd Summer Time + offset: +8:00 +HOVT: + - name: Hovd Time + offset: +7:00 +I: + - name: India Time Zone + offset: +9:00 +ICT: + - name: Indochina Time + offset: +7:00 +IDT: + - name: Israel Daylight Time + offset: +3:00 +IOT: + - name: Indian Chagos Time + offset: +6:00 +IRDT: + - name: Iran Daylight Time + offset: +4:30 +IRKST: + - name: Irkutsk Summer Time + offset: +9:00 +IRKT: + - name: Irkutsk Time + offset: +8:00 +IRST: + - name: Iran Standard Time + offset: +3:30 +IST: + - name: India Standard Time + offset: +5:30 + - name: Irish Standard Time + offset: +1:00 + - name: Israel Standard Time + offset: +2:00 +JST: + - name: Japan Standard Time + offset: +9:00 +K: + - name: Kilo Time Zone + offset: +10:00 +KGT: + - name: Kyrgyzstan Time + offset: +6:00 +KOST: + - name: Kosrae Time + offset: +11:00 +KRAST: + - name: Krasnoyarsk Summer Time + offset: +8:00 +KRAT: + - name: Krasnoyarsk Time + offset: +7:00 +KST: + - name: Korea Standard Time + offset: +9:00 +KUYT: + - name: Kuybyshev Time + offset: +4:00 +L: + - name: Lima Time Zone + offset: +11:00 +LHDT: + - name: Lord Howe Daylight Time + offset: +11:00 +LHST: + - name: Lord Howe Standard Time + offset: +10:30 +LINT: + - name: Line Islands Time + offset: +14:00 +M: + - name: Mike Time Zone + offset: +12:00 +MAGST: + - name: Magadan Summer Time + offset: +12:00 +MAGT: + - name: Magadan Time + offset: +11:00 +MART: + - name: Marquesas Time + offset: -9:30 +MAWT: + - name: Mawson Time + offset: +5:00 +MDT: + - name: Mountain Daylight Time + offset: -6:00 +MHT: + - name: Marshall Islands Time + offset: +12:00 +MMT: + - name: Myanmar Time + offset: +6:30 +MSD: + - name: Moscow Daylight Time + offset: +4:00 +MSK: + - name: Moscow Standard Time + offset: +3:00 +MST: + - name: Mountain Standard Time + offset: -7:00 +MUT: + - name: Mauritius Time + offset: +4:00 +MVT: + - name: Maldives Time + offset: +5:00 +MYT: + - name: Malaysia Time + offset: +8:00 +N: + - name: November Time Zone + offset: -1:00 +NCT: + - name: New Caledonia Time + offset: +11:00 +NDT: + - name: Newfoundland Daylight Time + offset: -2:30 +NFT: + - name: Norfolk Time + offset: +11:00 +NOVST: + - name: Novosibirsk Summer Time + offset: +7:00 +NOVT: + - name: Novosibirsk Time + offset: +7:00 +NPT: + - name: Nepal Time + offset: +5:45 +NRT: + - name: Nauru Time + offset: +12:00 +NST: + - name: Newfoundland Standard Time + offset: -3:30 +NUT: + - name: Niue Time + offset: -11:00 +NZDT: + - name: New Zealand Daylight Time + offset: +13:00 +NZST: + - name: New Zealand Standard Time + offset: +12:00 +O: + - name: Oscar Time Zone + offset: -2:00 +OMSST: + - name: Omsk Summer Time + offset: +7:00 +OMST: + - name: Omsk Standard Time + offset: +6:00 +ORAT: + - name: Oral Time + offset: +5:00 +P: + - name: Papa Time Zone + offset: -3:00 +PDT: + - name: Pacific Daylight Time + offset: -7:00 +PET: + - name: Peru Time + offset: -5:00 +PETST: + - name: Kamchatka Summer Time + offset: +12:00 +PETT: + - name: Kamchatka Time + offset: +12:00 +PGT: + - name: Papua New Guinea Time + offset: +10:00 +PHOT: + - name: Phoenix Island Time + offset: +13:00 +PHT: + - name: Philippine Time + offset: +8:00 +PKT: + - name: Pakistan Standard Time + offset: +5:00 +PMDT: + - name: Pierre & Miquelon Daylight Time + offset: -2:00 +PMST: + - name: Pierre & Miquelon Standard Time + offset: -3:00 +PONT: + - name: Pohnpei Standard Time + offset: +11:00 +PST: + - name: Pacific Standard Time + offset: -8:00 + - name: Pitcairn Standard Time + offset: -8:00 +PWT: + - name: Palau Time + offset: +9:00 +PYST: + - name: Paraguay Summer Time + offset: -3:00 +PYT: + - name: Paraguay Time + offset: -4:00 + - name: Pyongyang Time + offset: +8:30 +Q: + - name: Quebec Time Zone + offset: -4:00 +QYZT: + - name: Qyzylorda Time + offset: +6:00 +R: + - name: Romeo Time Zone + offset: -5:00 +RET: + - name: Reunion Time + offset: +4:00 +ROTT: + - name: Rothera Time + offset: -3:00 +S: + - name: Sierra Time Zone + offset: -6:00 +SAKT: + - name: Sakhalin Time + offset: +11:00 +SAMT: + - name: Samara Time + offset: +4:00 +SAST: + - name: South Africa Standard Time + offset: +2:00 +SBT: + - name: Solomon Islands Time + offset: +11:00 +SCT: + - name: Seychelles Time + offset: +4:00 +SGT: + - name: Singapore Time + offset: +8:00 +SRET: + - name: Srednekolymsk Time + offset: +11:00 +SRT: + - name: Suriname Time + offset: -3:00 +SST: + - name: Samoa Standard Time + offset: -11:00 +SYOT: + - name: Syowa Time + offset: +3:00 +T: + - name: Tango Time Zone + offset: -7:00 +TAHT: + - name: Tahiti Time + offset: -10:00 +TFT: + - name: French Southern and Antarctic Time + offset: +5:00 +TJT: + - name: Tajikistan Time + offset: +5:00 +TKT: + - name: Tokelau Time + offset: +13:00 +TLT: + - name: East Timor Time + offset: +9:00 +TMT: + - name: Turkmenistan Time + offset: +5:00 +TOST: + - name: Tonga Summer Time + offset: +14:00 +TOT: + - name: Tonga Time + offset: +13:00 +TRT: + - name: Turkey Time + offset: +3:00 +TVT: + - name: Tuvalu Time + offset: +12:00 +U: + - name: Uniform Time Zone + offset: -8:00 +ULAST: + - name: Ulaanbaatar Summer Time + offset: +9:00 +ULAT: + - name: Ulaanbaatar Time + offset: +8:00 +UTC: + - name: Coordinated Universal Time + offset: +0:00 +UYST: + - name: Uruguay Summer Time + offset: -2:00 +UYT: + - name: Uruguay Time + offset: -3:00 +UZT: + - name: Uzbekistan Time + offset: +5:00 +V: + - name: Victor Time Zone + offset: -9:00 +VET: + - name: Venezuelan Standard Time + offset: -4:00 +VLAST: + - name: Vladivostok Summer Time + offset: +11:00 +VLAT: + - name: Vladivostok Time + offset: +10:00 +VOST: + - name: Vostok Time + offset: +6:00 +VUT: + - name: Vanuatu Time + offset: +11:00 +W: + - name: Whiskey Time Zone + offset: -10:00 +WAKT: + - name: Wake Time + offset: +12:00 +WARST: + - name: Western Argentine Summer Time + offset: -3:00 +WAST: + - name: West Africa Summer Time + offset: +2:00 +WAT: + - name: West Africa Time + offset: +1:00 +WEST: + - name: Western European Summer Time + offset: +1:00 +WET: + - name: Western European Time + offset: +0:00 +WFT: + - name: Wallis and Futuna Time + offset: +12:00 +WGST: + - name: Western Greenland Summer Time + offset: -2:00 +WGT: + - name: West Greenland Time + offset: -3:00 +WIB: + - name: Western Indonesian Time + offset: +7:00 +WIT: + - name: Eastern Indonesian Time + offset: +9:00 +WITA: + - name: Central Indonesian Time + offset: +8:00 +WST: + - name: West Samoa Time + offset: +13:00 + - name: Western Sahara Summer Time + offset: +1:00 +WT: + - name: Western Sahara Standard Time + offset: +0:00 +X: + - name: X-ray Time Zone + offset: -11:00 +Y: + - name: Yankee Time Zone + offset: -12:00 +YAKST: + - name: Yakutsk Summer Time + offset: +10:00 +YAKT: + - name: Yakutsk Time + offset: +9:00 +YAPT: + - name: Yap Time + offset: +10:00 +YEKST: + - name: Yekaterinburg Summer Time + offset: +6:00 +YEKT: + - name: Yekaterinburg Time + offset: +5:00 +Z: + - name: Zulu Time Zone + offset: +0:00 From d7daf6d6564b19c4a8b543b1d38ac5d09ae894a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Fri, 25 Aug 2017 14:22:30 +0000 Subject: [PATCH 06/18] Added ambiguities management. Display relies on the template group 'list'. --- lib/DDG/Goodie/Timezonetime.pm | 56 +++++++++++++--------------------- 1 file changed, 21 insertions(+), 35 deletions(-) diff --git a/lib/DDG/Goodie/Timezonetime.pm b/lib/DDG/Goodie/Timezonetime.pm index d6a48be8bce..01123378645 100644 --- a/lib/DDG/Goodie/Timezonetime.pm +++ b/lib/DDG/Goodie/Timezonetime.pm @@ -5,6 +5,8 @@ use DDG::Goodie; use strict; use warnings; +use YAML::XS qw/LoadFile/; + use DateTime; use DateTime::TimeZone; @@ -15,51 +17,35 @@ triggers start => ("what time in", "what time is it in", "time in"); triggers startend => ("time", "now time", "time now"); # Mapping short timezone names to one used by DateTime:Timezone module -my $timezoneMapping = { - "IST" => "Asia/Kolkata", - "EST" => "EST", - "UTC" => "UTC", - "GMT" => "GMT", - "BST" => "Europe/London", - "PST" => "PST8PDT", - "CST" => "CST6CDT" -}; - -my $timezones = join('|', keys(%$timezoneMapping)); +my $timezoneMapping = LoadFile(share('abbreviations.yaml')); handle remainder => sub { my $query = $_; - my $daylightStatus = ""; - my $timezone = uc($query); - my $mappedTimezone = $timezoneMapping->{$timezone} // 0; - return unless $mappedTimezone; - - # Get time for desired timezone - my $tz = DateTime::TimeZone->new( name => $mappedTimezone ); - my $dt = DateTime->now(); - my $offset = $tz->offset_for_datetime($dt); - $dt->add(seconds => $offset); - my $time = $dt->hms(':'); - - # Check if timezone is in daylight saving or not - if ($tz->is_dst_for_datetime( $dt )) { - $daylightStatus = "$timezone is in daylight saving"; - } - else { - $daylightStatus = "$timezone is not in daylight saving"; - } + my $mappedTimezones = $timezoneMapping->{$timezone} // 0; + return unless $mappedTimezones; + + # Get time for desired timezones + my @times = map { + my $dt = DateTime->now(); + my $offset = DateTime::TimeZone->offset_as_seconds($_->{offset}); + $dt->add(seconds => $offset); + { name => $_->{name}, time => $dt->hms(':') }; + } @{$mappedTimezones}; - return "$time $timezone $daylightStatus", + return "times in $timezone", structured_answer => { - data => { - title => "$time $timezone", - subtitle => "$daylightStatus", + title => "Timezone $timezone", + list => \@times }, templates => { - group => 'text', + group => 'list', + options => { + list_content => 'DDH.timezonetime.content', + moreAt => 0 + } } }; }; From e44edbcc1d2a9cfe06af3e2b4672ba40ddec3f7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Fri, 25 Aug 2017 14:23:50 +0000 Subject: [PATCH 07/18] Added subtemplate. --- share/goodie/timezonetime/content.handlebars | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 share/goodie/timezonetime/content.handlebars diff --git a/share/goodie/timezonetime/content.handlebars b/share/goodie/timezonetime/content.handlebars new file mode 100644 index 00000000000..78dbfef987c --- /dev/null +++ b/share/goodie/timezonetime/content.handlebars @@ -0,0 +1,4 @@ +
+ {{name}} + {{time}} +
\ No newline at end of file From d51988d342136cc801909166e28654d96cfe05a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Fri, 25 Aug 2017 14:24:16 +0000 Subject: [PATCH 08/18] Added some style. --- share/goodie/timezonetime/timezonetime.css | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 share/goodie/timezonetime/timezonetime.css diff --git a/share/goodie/timezonetime/timezonetime.css b/share/goodie/timezonetime/timezonetime.css new file mode 100644 index 00000000000..ac513f7811b --- /dev/null +++ b/share/goodie/timezonetime/timezonetime.css @@ -0,0 +1,13 @@ +.zci--timezonetime .timezone { + min-width: 20em; +} + +.zci--timezonetime .timezone .timezone_name { + display: line-block; +} + +.zci--timezonetime .timezone .timezone_time { + display: line-block; + float: right; + text-align: right; +} \ No newline at end of file From 82ac14e17810dfee62b63dfa0350b02dc687186c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Fri, 25 Aug 2017 22:19:57 +0000 Subject: [PATCH 09/18] Added UTC offset. --- lib/DDG/Goodie/Timezonetime.pm | 4 ++-- share/goodie/timezonetime/content.handlebars | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/DDG/Goodie/Timezonetime.pm b/lib/DDG/Goodie/Timezonetime.pm index 01123378645..f74b8e0449e 100644 --- a/lib/DDG/Goodie/Timezonetime.pm +++ b/lib/DDG/Goodie/Timezonetime.pm @@ -28,10 +28,10 @@ handle remainder => sub { # Get time for desired timezones my @times = map { - my $dt = DateTime->now(); + my $dt = DateTime->now(time_zone => 'UTC'); my $offset = DateTime::TimeZone->offset_as_seconds($_->{offset}); $dt->add(seconds => $offset); - { name => $_->{name}, time => $dt->hms(':') }; + { name => $_->{name}, time => $dt->hms(':'), offset => $_->{offset} }; } @{$mappedTimezones}; return "times in $timezone", diff --git a/share/goodie/timezonetime/content.handlebars b/share/goodie/timezonetime/content.handlebars index 78dbfef987c..665edddf61a 100644 --- a/share/goodie/timezonetime/content.handlebars +++ b/share/goodie/timezonetime/content.handlebars @@ -1,4 +1,4 @@
{{name}} - {{time}} + {{time}} (UTC {{offset}})
\ No newline at end of file From 48de83d51dfde50656fa7d33d0e6fc2d43f503f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Sat, 26 Aug 2017 12:35:36 +0000 Subject: [PATCH 10/18] Added some metainfo. --- lib/DDG/Goodie/Timezonetime.pm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/DDG/Goodie/Timezonetime.pm b/lib/DDG/Goodie/Timezonetime.pm index f74b8e0449e..e7fb65d3331 100644 --- a/lib/DDG/Goodie/Timezonetime.pm +++ b/lib/DDG/Goodie/Timezonetime.pm @@ -36,6 +36,10 @@ handle remainder => sub { return "times in $timezone", structured_answer => { + meta => { + sourceName => 'timeanddate', + sourceURL => 'https://www.timeanddate.com/time/zones/' + }, data => { title => "Timezone $timezone", list => \@times From 3e247dddd8ec38f043f1cee551313f4aa086e625 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Sat, 26 Aug 2017 12:45:17 +0000 Subject: [PATCH 11/18] Fixed BEM notation. --- lib/DDG/Goodie/Timezonetime.pm | 7 ++++--- share/goodie/timezonetime/content.handlebars | 4 ++-- share/goodie/timezonetime/timezonetime.css | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/DDG/Goodie/Timezonetime.pm b/lib/DDG/Goodie/Timezonetime.pm index e7fb65d3331..26512abb49d 100644 --- a/lib/DDG/Goodie/Timezonetime.pm +++ b/lib/DDG/Goodie/Timezonetime.pm @@ -31,14 +31,16 @@ handle remainder => sub { my $dt = DateTime->now(time_zone => 'UTC'); my $offset = DateTime::TimeZone->offset_as_seconds($_->{offset}); $dt->add(seconds => $offset); - { name => $_->{name}, time => $dt->hms(':'), offset => $_->{offset} }; + { name => $_->{name}, + time => $dt->hms(':'), + offset => $_->{offset} }; } @{$mappedTimezones}; return "times in $timezone", structured_answer => { meta => { sourceName => 'timeanddate', - sourceURL => 'https://www.timeanddate.com/time/zones/' + sourceUrl => 'https://www.timeanddate.com/time/zones/' }, data => { title => "Timezone $timezone", @@ -48,7 +50,6 @@ handle remainder => sub { group => 'list', options => { list_content => 'DDH.timezonetime.content', - moreAt => 0 } } }; diff --git a/share/goodie/timezonetime/content.handlebars b/share/goodie/timezonetime/content.handlebars index 665edddf61a..67856772792 100644 --- a/share/goodie/timezonetime/content.handlebars +++ b/share/goodie/timezonetime/content.handlebars @@ -1,4 +1,4 @@
- {{name}} - {{time}} (UTC {{offset}}) + {{name}} + {{time}} (UTC {{offset}})
\ No newline at end of file diff --git a/share/goodie/timezonetime/timezonetime.css b/share/goodie/timezonetime/timezonetime.css index ac513f7811b..353b74532ac 100644 --- a/share/goodie/timezonetime/timezonetime.css +++ b/share/goodie/timezonetime/timezonetime.css @@ -2,11 +2,11 @@ min-width: 20em; } -.zci--timezonetime .timezone .timezone_name { +.zci--timezonetime .timezone .timezone__name { display: line-block; } -.zci--timezonetime .timezone .timezone_time { +.zci--timezonetime .timezone .timezone__time { display: line-block; float: right; text-align: right; From 25173873782f8da0b36a8009a8f21420de697c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Sat, 26 Aug 2017 12:58:17 +0000 Subject: [PATCH 12/18] Added a copy of a datetime object instead of creating a new one at each iteration. --- lib/DDG/Goodie/Timezonetime.pm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/DDG/Goodie/Timezonetime.pm b/lib/DDG/Goodie/Timezonetime.pm index 26512abb49d..ac3c304df26 100644 --- a/lib/DDG/Goodie/Timezonetime.pm +++ b/lib/DDG/Goodie/Timezonetime.pm @@ -27,12 +27,13 @@ handle remainder => sub { return unless $mappedTimezones; # Get time for desired timezones + my $dt = DateTime->now(time_zone => 'UTC'); my @times = map { - my $dt = DateTime->now(time_zone => 'UTC'); my $offset = DateTime::TimeZone->offset_as_seconds($_->{offset}); - $dt->add(seconds => $offset); + my $dt_clone = $dt->clone; + $dt_clone->add(seconds => $offset); { name => $_->{name}, - time => $dt->hms(':'), + time => $dt_clone->hms(':'), offset => $_->{offset} }; } @{$mappedTimezones}; From e263d31aa890509c9017086821ef2e130b8c563e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Sat, 26 Aug 2017 14:11:00 +0000 Subject: [PATCH 13/18] Fixed tests. --- lib/DDG/Goodie/Timezonetime.pm | 2 +- t/Timezonetime.t | 70 ++++++++++++++++++++++------------ 2 files changed, 46 insertions(+), 26 deletions(-) diff --git a/lib/DDG/Goodie/Timezonetime.pm b/lib/DDG/Goodie/Timezonetime.pm index ac3c304df26..bc4e7fc6b4c 100644 --- a/lib/DDG/Goodie/Timezonetime.pm +++ b/lib/DDG/Goodie/Timezonetime.pm @@ -50,7 +50,7 @@ handle remainder => sub { templates => { group => 'list', options => { - list_content => 'DDH.timezonetime.content', + list_content => 'DDH.timezonetime.content' } } }; diff --git a/t/Timezonetime.t b/t/Timezonetime.t index 69c6fbff35a..bab461c61f4 100644 --- a/t/Timezonetime.t +++ b/t/Timezonetime.t @@ -12,16 +12,23 @@ zci answer_type => 'timezonetime'; zci is_cached => 1; sub build_structured_answer { - my ($time, $timezone, $daylightSaving) = @_; + my ($times, $timezone) = @_; - return "$time $timezone $daylightSaving", + return "times in $timezone", structured_answer => { + meta => { + sourceName => 'timeanddate', + sourceUrl => 'https://www.timeanddate.com/time/zones/' + }, data => { - title => "$time $timezone", - subtitle => "$daylightSaving", + title => "Timezone $timezone", + list => $times }, templates => { - group => 'text', + group => 'list', + options => { + list_content => 'DDH.timezonetime.content' + } } }; } @@ -35,14 +42,39 @@ ddg_goodie_test( ['DDG::Goodie::Timezonetime'], # - # 1. Queries that SHOULD TRIGGER ~~ IN DAYLIGHT SAVINGS + # Queries that SHOULD TRIGGER ~~ IN DAYLIGHT SAVINGS # - 'time in pst' => build_test("02:36:53", "PST", "PST is in daylight saving"), - 'time now cst' => build_test("04:36:53", "CST", "CST is in daylight saving"), - 'time in pst' => build_test("02:36:53", "PST", "PST is in daylight saving"), - 'time now cst' => build_test("04:36:53", "CST", "CST is in daylight saving"), - 'time in pst' => build_test("02:36:53", "PST", "PST is in daylight saving"), - 'time now cst' => build_test("04:36:53", "CST", "CST is in daylight saving"), + 'time in cet' => build_test([{ name => "Central European Time", + offset => "+1:00", + time => "10:36:53" }], + "CET"), + 'time now cst' => build_test([{ name => "Central Standard Time", + offset => "-6:00", + time => "03:36:53" }, + { name => "China Standard Time", + offset => "+8:00", + time => "17:36:53" }, + { name => "Cuba Standard Time", + offset => "-5:00", + time => "04:36:53" }], + "CST"), + 'time in pst' => build_test([{ name => "Pacific Standard Time", + offset => "-8:00", + time => "01:36:53" }, + { name => "Pitcairn Standard Time", + offset => "-8:00", + time => "01:36:53"}], + "PST"), + 'time now cst' => build_test([{ name => "Central Standard Time", + offset => "-6:00", + time => "03:36:53" }, + { name => "China Standard Time", + offset => "+8:00", + time => "17:36:53" }, + { name => "Cuba Standard Time", + offset => "-5:00", + time => "04:36:53" }], + "CST") ); # INFO: Freezes time for below tests. @@ -50,20 +82,8 @@ set_fixed_time('2016-01-03T09:36:53Z'); ddg_goodie_test( ['DDG::Goodie::Timezonetime'], - - # - # 2. Queries that SHOULD TRIGGER ~~ NOT IN DAYLIGHT SAVINGS - # - 'time in pst' => build_test("01:36:53", "PST", "PST is not in daylight saving"), - 'ist now time' => build_test("15:06:53", "IST", "IST is not in daylight saving"), - 'time now cst' => build_test("03:36:53", "CST", "CST is not in daylight saving"), - 'time in pst' => build_test("01:36:53", "PST", "PST is not in daylight saving"), - 'ist now time' => build_test("15:06:53", "IST", "IST is not in daylight saving"), - 'time now cst' => build_test("03:36:53", "CST", "CST is not in daylight saving"), - 'time in pst' => build_test("01:36:53", "PST", "PST is not in daylight saving"), - # - # 3. Queries that SHOULD NOT TRIGGER + # Queries that SHOULD NOT TRIGGER # 'what is the time in new york' => undef, 'do you know what time it is?' => undef, From 9db2d48dedc22be33925591aa2321fb741659726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Mon, 28 Aug 2017 10:46:00 +0000 Subject: [PATCH 14/18] Added conversion of offsets. Rewrite map into a for loop. --- lib/DDG/Goodie/Timezonetime.pm | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/DDG/Goodie/Timezonetime.pm b/lib/DDG/Goodie/Timezonetime.pm index bc4e7fc6b4c..7e1a65129f1 100644 --- a/lib/DDG/Goodie/Timezonetime.pm +++ b/lib/DDG/Goodie/Timezonetime.pm @@ -19,6 +19,14 @@ triggers startend => ("time", "now time", "time now"); # Mapping short timezone names to one used by DateTime:Timezone module my $timezoneMapping = LoadFile(share('abbreviations.yaml')); +# Add a field (offset_seconds) with offsets converted to seconds. +for my $abbreviation (keys %{$timezoneMapping}) { + for my $timezone (@{$timezoneMapping->{$abbreviation}}) { + my $seconds = DateTime::TimeZone->offset_as_seconds($timezone->{offset}); + $timezone->{offset_seconds} = $seconds; + } +} + handle remainder => sub { my $query = $_; @@ -28,14 +36,14 @@ handle remainder => sub { # Get time for desired timezones my $dt = DateTime->now(time_zone => 'UTC'); - my @times = map { - my $offset = DateTime::TimeZone->offset_as_seconds($_->{offset}); + my @times = (); + for (@{$mappedTimezones}) { my $dt_clone = $dt->clone; - $dt_clone->add(seconds => $offset); - { name => $_->{name}, - time => $dt_clone->hms(':'), - offset => $_->{offset} }; - } @{$mappedTimezones}; + $dt_clone->add(seconds => $_->{offset_seconds}); + push @times, { name => $_->{name}, + time => $dt_clone->hms(':'), + offset => $_->{offset} }; + } return "times in $timezone", structured_answer => { From 9394643f6534d7aa1704f5b5fa6f5a5b86e8bb91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Mon, 28 Aug 2017 13:24:39 +0000 Subject: [PATCH 15/18] Added date to avoid confusion. --- lib/DDG/Goodie/Timezonetime.pm | 8 +++++-- share/goodie/timezonetime/content.handlebars | 7 ++++-- share/goodie/timezonetime/timezonetime.css | 25 ++++++++++++++++---- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/lib/DDG/Goodie/Timezonetime.pm b/lib/DDG/Goodie/Timezonetime.pm index 7e1a65129f1..099725acdfb 100644 --- a/lib/DDG/Goodie/Timezonetime.pm +++ b/lib/DDG/Goodie/Timezonetime.pm @@ -41,8 +41,12 @@ handle remainder => sub { my $dt_clone = $dt->clone; $dt_clone->add(seconds => $_->{offset_seconds}); push @times, { name => $_->{name}, - time => $dt_clone->hms(':'), - offset => $_->{offset} }; + time => $dt_clone->hms(':'), + offset => $_->{offset}, + day => $dt_clone->day, + dayName => $dt_clone->day_name, + monthName => $dt_clone->month_name, + year => $dt_clone->year }; } return "times in $timezone", diff --git a/share/goodie/timezonetime/content.handlebars b/share/goodie/timezonetime/content.handlebars index 67856772792..478ac37a84a 100644 --- a/share/goodie/timezonetime/content.handlebars +++ b/share/goodie/timezonetime/content.handlebars @@ -1,4 +1,7 @@
- {{name}} - {{time}} (UTC {{offset}}) +
{{name}}
+
+ {{time}} (UTC {{offset}}) + {{dayName}}, {{monthName}} {{day}}, {{year}} +
\ No newline at end of file diff --git a/share/goodie/timezonetime/timezonetime.css b/share/goodie/timezonetime/timezonetime.css index 353b74532ac..b744103c1dc 100644 --- a/share/goodie/timezonetime/timezonetime.css +++ b/share/goodie/timezonetime/timezonetime.css @@ -1,13 +1,28 @@ .zci--timezonetime .timezone { - min-width: 20em; + width: 100%; + height: 2.5em; } -.zci--timezonetime .timezone .timezone__name { - display: line-block; +.zci--timezonetime .timezone > * { + vertical-align: middle; } -.zci--timezonetime .timezone .timezone__time { - display: line-block; +.zci--timezonetime .timezone__name { + display: inline-block; + float: left; +} + +.zci--timezonetime .timezone__datetime { + display: inline-block; float: right; text-align: right; +} + +.zci--timezonetime .timezone__datetime__time { + display: block; + +} + +.zci--timezonetime .timezone__datetime__date { + display: block; } \ No newline at end of file From 2e79ff00d5e569ef1162db18ff339b6cd75761a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Tue, 29 Aug 2017 14:41:53 +0000 Subject: [PATCH 16/18] Fixed css. --- share/goodie/timezonetime/timezonetime.css | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/share/goodie/timezonetime/timezonetime.css b/share/goodie/timezonetime/timezonetime.css index b744103c1dc..a320846b8c7 100644 --- a/share/goodie/timezonetime/timezonetime.css +++ b/share/goodie/timezonetime/timezonetime.css @@ -3,19 +3,16 @@ height: 2.5em; } -.zci--timezonetime .timezone > * { - vertical-align: middle; -} - .zci--timezonetime .timezone__name { display: inline-block; + margin: auto 0 auto 0; float: left; } .zci--timezonetime .timezone__datetime { display: inline-block; float: right; - text-align: right; + text-align: center; } .zci--timezonetime .timezone__datetime__time { From a1481b53bbc317be64e64a5d4e6183da27378ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Tue, 29 Aug 2017 14:42:11 +0000 Subject: [PATCH 17/18] Fixed tests. --- t/Timezonetime.t | 57 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/t/Timezonetime.t b/t/Timezonetime.t index bab461c61f4..d317ba86bd1 100644 --- a/t/Timezonetime.t +++ b/t/Timezonetime.t @@ -41,39 +41,72 @@ set_fixed_time('2017-06-03T09:36:53Z'); ddg_goodie_test( ['DDG::Goodie::Timezonetime'], - # - # Queries that SHOULD TRIGGER ~~ IN DAYLIGHT SAVINGS - # 'time in cet' => build_test([{ name => "Central European Time", offset => "+1:00", - time => "10:36:53" }], + time => "10:36:53", + day => 3, + dayName => "Saturday", + monthName => "June", + year => 2017 }], "CET"), 'time now cst' => build_test([{ name => "Central Standard Time", offset => "-6:00", - time => "03:36:53" }, + time => "03:36:53", + day => 3, + dayName => "Saturday", + monthName => "June", + year => 2017 }, { name => "China Standard Time", offset => "+8:00", - time => "17:36:53" }, + time => "17:36:53", + day => 3, + dayName => "Saturday", + monthName => "June", + year => 2017 }, { name => "Cuba Standard Time", offset => "-5:00", - time => "04:36:53" }], + time => "04:36:53", + day => 3, + dayName => "Saturday", + monthName => "June", + year => 2017 }], "CST"), 'time in pst' => build_test([{ name => "Pacific Standard Time", offset => "-8:00", - time => "01:36:53" }, + time => "01:36:53", + day => 3, + dayName => "Saturday", + monthName => "June", + year => 2017 }, { name => "Pitcairn Standard Time", offset => "-8:00", - time => "01:36:53"}], + time => "01:36:53", + day => 3, + dayName => "Saturday", + monthName => "June", + year => 2017 }], "PST"), 'time now cst' => build_test([{ name => "Central Standard Time", offset => "-6:00", - time => "03:36:53" }, + time => "03:36:53", + day => 3, + dayName => "Saturday", + monthName => "June", + year => 2017 }, { name => "China Standard Time", offset => "+8:00", - time => "17:36:53" }, + time => "17:36:53", + day => 3, + dayName => "Saturday", + monthName => "June", + year => 2017 }, { name => "Cuba Standard Time", offset => "-5:00", - time => "04:36:53" }], + time => "04:36:53", + day => 3, + dayName => "Saturday", + monthName => "June", + year => 2017 }], "CST") ); From 8f351882136c223177ee967dc5d7994c1a248629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Salvucci?= Date: Wed, 30 Aug 2017 13:05:45 +0000 Subject: [PATCH 18/18] Fixed tests. Now using different times. --- t/Timezonetime.t | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/t/Timezonetime.t b/t/Timezonetime.t index d317ba86bd1..983b5f051f5 100644 --- a/t/Timezonetime.t +++ b/t/Timezonetime.t @@ -110,6 +110,70 @@ ddg_goodie_test( "CST") ); +# Time fixed at the end of a day for UTC, hence we can observe that some +# timezones are a day after. +set_fixed_time('2015-06-16T23:59:14Z'); + +ddg_goodie_test( + ['DDG::Goodie::Timezonetime'], + + 'time in cest' => build_test([{ name => "Central European Summer Time", + offset => "+2:00", + time => "01:59:14", + day => 17, + dayName => "Wednesday", + monthName => "June", + year => 2015 }], + "CEST"), + 'time now ist' => build_test([{ name => "India Standard Time", + offset => "+5:30", + time => "05:29:14", + day => 17, + dayName => "Wednesday", + monthName => "June", + year => 2015}, + { name => "Irish Standard Time", + offset => "+1:00", + time => "00:59:14", + day => 17, + dayName => "Wednesday", + monthName => "June", + year => 2015 }, + { name => "Israel Standard Time", + offset => "+2:00", + time => "01:59:14", + day => 17, + dayName => "Wednesday", + monthName => "June", + year => 2015 }], + "IST") +); + +# Time is fixed at the beginning of a day for UTC, hence we can observe +# that some timezones are a day before. +set_fixed_time('2015-06-16T00:30:12Z'); + +ddg_goodie_test( + ['DDG::Goodie::Timezonetime'], + + 'time in gft' => build_test([{ name => "French Guiana Time", + offset => "-3:00", + time => "21:30:12", + day => 15, + dayName => "Monday", + monthName => "June", + year => 2015 }], + "GFT"), + 'time now hadt' => build_test([{ name => "Hawaii-Aleutian Daylight Time", + offset => "-9:00", + time => "15:30:12", + day => 15, + dayName => "Monday", + monthName => "June", + year => 2015 }], + "HADT") +); + # INFO: Freezes time for below tests. set_fixed_time('2016-01-03T09:36:53Z');