marticliment / ElevenClock

ElevenClock: Customize Windows 11 taskbar clock
https://www.marticliment.com/elevenclock/
GNU General Public License v3.0
2.31k stars 176 forks source link

Show additional time zones in tool tip #1039

Closed Rayman256 closed 1 year ago

Rayman256 commented 1 year ago

Windows seems to be limited to setting up and showing 2 additional time zones, e.g., when hovering over the clock. It would be useful if you could find a way to hold and show more, i.e., so that the tool tip would be expanded to show 3, 4 or more additional time zones

Andrew-J-Larson commented 1 year ago

Should be possible after they take a look at my example of working timezone code at https://github.com/martinet101/ElevenClock/issues/1018#issuecomment-1330063502 and https://github.com/martinet101/ElevenClock/issues/989#issuecomment-1330150676

(actually, most up-to-date info is below)

Andrew-J-Larson commented 1 year ago

@martinet101, to make timezone selection easier on those that want to use them, you'll probably want to use/integrate a, or make your own, map timezone picker like https://github.com/jannikmi/timezonefinder (and functionally would kinda feel like this https://kevinnovak.github.io/Time-Zone-Picker/)

Andrew-J-Larson commented 1 year ago

And as for how to include it as formatting in the time date formatter,

I'd suggest doing it in the same way that linux uses temporary changes to environment variables... e.g. you can specify the change in timezone by putting the changed environment variable at the start of a command (e.g. TZ=America/Los_Angeles date +"%I:%M %p %Z (%z)" would produce 11:19 PM PST (-0800)

So, likewise, for the formatter, you could use something like the following:

Click for more, but useless, info (see next comment for why) As for what the TZ variable should able to accept, I noticed you use a static instance of `win_tz`? I think it would be better if you just were to install and import `tzlocal`, as it does appear to have been heavily updated since your last `win_tz` file grab, and the `win_tz` would come from the updated `tzlocal` package instead. However, if you use something like `dateutil` or `pytz`, they also have their own lists of timezones. - dateutil (bases itself on the system provided timezones) => `dateutil.zoneinfo.ZoneInfoFile(dateutil.zoneinfo.getzoneinfofile_stream()).zones.keys()` - pytz (comes with its own IANA standardized set of timezones) => `pytz.all_timezones` If it were me, I would use both. Using `dateutil` for wider capture of different timezone formats, and `pytz` for niche people like me that wants the abbreviated timezone codes in their date times, since only `pytz` outputs those abbreviated formats.
Andrew-J-Larson commented 1 year ago

Also, did more research, and found that there's more official python packages that can be used before having to resort to third parties, which means the following packages can be avoided: pytz (no need to install or import), dateutil (no need to install or import, unless you're using it for other things besides timezones), win_tz (this stagnate file is useless when tzlocal could be installed and auto updated on each new build):

# Python Official, included with 3.9+, zoneinfo is Python's own official timezone database for datetime and etc.
import datetime, zoneinfo

# Python Official, needs to be installed; tzdata is for devices lacking IANA timezones (populates zoneinfo on Windows)
import tzdata # $ pip install tzdata

# third-party, but only used for the soul purpose of "translating" the Windows local timezone to IANA local timezone
import tzlocal # $ pip install tzlocal

LOCAL_TIMEZONE = tzlocal.get_localzone_name()
dateTimeFormat = "%I:%M %p %Z (%z)"

# timezones
# NOW = None
# NOW_TZ = Uses system local timezone string
local = zoneinfo.ZoneInfo(LOCAL_TIMEZONE) # avoid `tzlocal.get_localzone()` (creates a pytz shim, waste of resources)
utc = datetime.timezone.utc
portland = zoneinfo.ZoneInfo('America/Los_Angeles')
egypt = zoneinfo.ZoneInfo('Africa/Cairo')
amazonas = zoneinfo.ZoneInfo('America/Manaus')
armenia = zoneinfo.ZoneInfo('Asia/Tbilisi')

# not timezone aware
now = datetime.datetime.now() # by default timezone data isn't included in datetime
# is timezone aware (lets `%z` and `%Z` work)
nowTZ = datetime.datetime.now().astimezone()
nowLocal = now.astimezone(local)
nowUTC = now.astimezone(utc)
nowPortland = now.astimezone(portland)
nowEgypt = now.astimezone(egypt)
nowAmazonas = now.astimezone(amazonas)
nowArmenia = now.astimezone(armenia)

# now use strftime to format times
time = now.strftime(dateTimeFormat)
timeTZ = nowTZ.strftime(dateTimeFormat)
timeLocal = nowLocal.strftime(dateTimeFormat)
timeUTC = nowUTC.strftime(dateTimeFormat)
timePortland = nowPortland.strftime(dateTimeFormat)
timeEgypt = nowEgypt.strftime(dateTimeFormat)
timeAmazonas = nowAmazonas.strftime(dateTimeFormat)
timeArmenia = nowArmenia.strftime(dateTimeFormat)

print("Results formated as ====>",dateTimeFormat)
print("")
print("Now -------------------->",time)
print("Now (with OS timezone) ->",timeTZ)
print("")
print("<= Forcing use of IANA =>")
print("Local timezone --------->",timeLocal)
print("In UTC ----------------->",timeUTC)
print("Portland, Oregon ------->",timePortland)
print("Egypt, Africa ---------->",timeEgypt)
print("Amazonias, Brazil ------>",timeAmazonas)
print("Armenia, Asia ---------->",timeArmenia)
Andrew-J-Larson commented 1 year ago

This shows the results properly working, with the original implementations as the top two.

Results formated as ====> %I:%M %p %Z (%z)

Now --------------------> 03:13 AM  ()
Now (with OS timezone) -> 03:13 AM Pacific Standard Time (-0800)

<= Forcing use of IANA =>
Local timezone ---------> 03:13 AM PST (-0800)
In UTC -----------------> 11:13 AM UTC (+0000)
Portland, Oregon -------> 03:13 AM PST (-0800)
Egypt, Africa ----------> 01:13 PM EET (+0200)
Amazonias, Brazil ------> 07:13 AM -04 (-0400)
Armenia, Asia ----------> 03:13 PM +04 (+0400)
Andrew-J-Larson commented 1 year ago

And, this would prevent the need to worry about using any other timezone types other than what's listed from

print(zoneinfo.available_timezones())

Which results in the following list of available timezones

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

I'll take a look at this.

I guess there shoud be no issue while implementing this feature, but I had issues with timezones before

marticliment commented 1 year ago

Due to the technical diffculty and the need of a complete rewrite of the base code, this feature will not be worked on

Andrew-J-Larson commented 1 year ago

Yeah... I would have added it myself, the timezone capabilities at least (not necessarily the tooltip portion noted here)... but I guess you noticed the same thing that I did, in that your code is a bit all over the place regarding the time control/formatting.

However, does this mean that a rewrite is being thought about and/or in the works @marticliment ?

marticliment commented 1 year ago

To be honest, the whole code is a mess, and it needs a serious rewrite.

It will come, but maybe not soon, since my free time is currently quite limited, and I also have other projects I maintain.