K8s cluster is healthy, but kubelet display unusual message repeatedly every minute - kubernetes

My k8s-env1 is on-premise and running well. I can create/get/describe/delete any k8s object.
However, I found kubelet display following message every minute, but it does not present in my another k8s-env2. Is this message ok on k8s-env1?
Feb 10 10:39:09 k8s-env1 kubelet[15461]: I0210 10:39:09.808611 15461 kubelet_getters.go:172] status for pod kube-controller-manager-k8s-env1 updated to {Running [{Initialized True 0001-01-01 00:00:00 +0000 UTC 2022-02-10 09:32:58 +0800 CST } {Ready True 0001-01-01 00:00:00 +0000 UTC 2022-02-10 09:32:58 +0800 CST } {ContainersReady True 0001-01-01 00:00:00 +0000 UTC 2022-02-10 09:32:58 +0800 CST } {PodScheduled True 0001-01-01 00:00:00 +0000 UTC 2022-02-10 09:32:58 +0800 CST }] 192.168.1.2 192.168.1.2 [{192.168.1.2}] 2022-02-10 09:32:58 +0800 CST [] [{kube-controller-manager {nil &ContainerStateRunning{StartedAt:2022-02-10 09:40:36 +0800 CST,} nil} {nil nil &ContainerStateTerminated{ExitCode:2,Signal:0,Reason:Error,Message:,StartedAt:2022-02-10 09:23:08 +0800 CST,FinishedAt:2022-02-10 09:38:13 +0800 CST,ContainerID:docker://1cc6e402be458374d365b6e379e7205267279c4da554c2207baca11cc1609be9,}} true 202 k8s.gcr.io/kube-controller-manager:v1.16.15 docker-pullable://k8s.gcr.io/kube-controller-manager#sha256:da7ac5487dc7b6eddfb4fbdf39af92bc065416a7dac147a937a39aff72716fe9 docker://7d0aa1e7ae3e3463347d68c644f45f97933ca819a4231b79a7fedcb5f8792dc6 0xc00189beb6}] Burstable []}
Feb 10 10:39:09 k8s-env1 kubelet[15461]: I0210 10:39:09.808770 15461 kubelet_getters.go:172] status for pod kube-scheduler-k8s-env1 updated to {Running [{Initialized True 0001-01-01 00:00:00 +0000 UTC 2022-02-10 09:32:58 +0800 CST } {Ready True 0001-01-01 00:00:00 +0000 UTC 2022-02-10 09:32:58 +0800 CST } {ContainersReady True 0001-01-01 00:00:00 +0000 UTC 2022-02-10 09:32:58 +0800 CST } {PodScheduled True 0001-01-01 00:00:00 +0000 UTC 2022-02-10 09:32:58 +0800 CST }] 192.168.1.2 192.168.1.2 [{192.168.1.2}] 2022-02-10 09:32:58 +0800 CST [] [{kube-scheduler {nil &ContainerStateRunning{StartedAt:2022-02-10 09:40:40 +0800 CST,} nil} {nil nil &ContainerStateTerminated{ExitCode:2,Signal:0,Reason:Error,Message:,StartedAt:2022-02-10 09:23:06 +0800 CST,FinishedAt:2022-02-10 09:38:14 +0800 CST,ContainerID:docker://94860e938310683e1a478d681256e649c00ba74570e70963b76804f60480b7a0,}} true 201 k8s.gcr.io/kube-scheduler:v1.16.15 docker-pullable://k8s.gcr.io/kube-scheduler#sha256:d9156baf649cd356bad6be119a62cf137b73956957604275ab8e3008bee96c8f docker://d626ea52253994ca2ee7d5b61ead84dacb0b99fd8f21b21268d92d53451e09af 0xc001c91189}] Burstable []}
Feb 10 10:39:09 k8s-env1 kubelet[15461]: I0210 10:39:09.808814 15461 kubelet_getters.go:172] status for pod kube-apiserver-k8s-env1 updated to {Running [{Initialized True 0001-01-01 00:00:00 +0000 UTC 2022-01-17 00:27:28 +0800 CST } {Ready True 0001-01-01 00:00:00 +0000 UTC 2022-01-28 13:17:18 +0800 CST } {ContainersReady True 0001-01-01 00:00:00 +0000 UTC 2022-01-17 00:38:58 +0800 CST } {PodScheduled True 0001-01-01 00:00:00 +0000 UTC 2022-01-17 00:27:28 +0800 CST }] 192.168.1.2 192.168.1.2 [{192.168.1.2}] 2022-01-17 00:27:28 +0800 CST [] [{kube-apiserver {nil &ContainerStateRunning{StartedAt:2022-02-10 09:40:33 +0800 CST,} nil} {nil nil &ContainerStateTerminated{ExitCode:137,Signal:0,Reason:Error,Message:,StartedAt:2022-02-10 09:23:05 +0800 CST,FinishedAt:2022-02-10 09:38:24 +0800 CST,ContainerID:docker://fcc0d48a9398656adc3e071b37f0f502ab45f0730e0d9ad51401db2b856fe1f3,}} true 16 k8s.gcr.io/kube-apiserver:v1.16.15 docker-pullable://k8s.gcr.io/kube-apiserver#sha256:58075c15f5978b4b73e58b004bb3a1856ad58a9061ac3075ef860207ba00ac75 docker://95a526b063d00b5eb497dc3280a0cf4610fec31a072685eb7279f5207dcc27b1 0xc00156e74c}] Burstable []}
Feb 10 10:39:10 k8s-env1 kubelet[15461]: I0210 10:39:10.064116 15461 kubelet_network_linux.go:141] Not using `--random-fully` in the MASQUERADE rule for iptables because the local version of iptables does not support it

In theory this shouldn't affect any functionality, but to.get rid of this you can try installing a iptables version(1.6.2) which has support to the random fully. Something like this should do
Run the following inside the kubelet and reboot once done
apt remove --purge iptables && \
apt autoremove -y && \
clean-install libip4tc0=1.6.2-1.1~bpo9+1 \
libip6tc0=1.6.2-1.1~bpo9+1 \
libiptc0=1.6.2-1.1~bpo9+1 \
libxtables12=1.6.2-1.1~bpo9+1 \
iptables=1.6.2-1.1~bpo9+1

Related

Single planning calendar with fullday off

I have a problem with Single planning calendar.
I set fullday to false and set a startHour (8h) and endHour (17h).
But when i want to resize an appointment the startDate is not correct.
handleAppointmentResize: function (oEvent) {
var oAppointment = oEvent.getParameter("appointment"),
oStartDate = oEvent.getParameter("startDate"),
oEndDate = oEvent.getParameter("endDate"),
sAppointmentTitle = oAppointment.getTitle();
console.log(oStartDate);
console.log(oEndDate);
For exemple :
I have an appointment :
Wed Apr 06 2022 09:00:00 to Wed Apr 06 2022 13:00:00
I reduce them to 09:00 - 10:00
The result is
Mon Apr 04 2022 19:30:00 GMT+0200 (heure d’été d’Europe centrale)
Wed Apr 06 2022 09:00:00 GMT+0200 (heure d’été d’Europe centrale)
If i switch fullday to true, the result is ok !
Thanks for help
Resolve with upgrade of Sapui5 version

Order of objects retrieved from working memory in Drools

We have been coding a rule that changes the status of billed items that are repeated on the same day and that should only be billed once a day. All items have a status of 2 or 3 to begin with.
If a duplicated code is detected on an item with status 2 or 3, the item will get status 4 and the item in the working memory is updated.
When realising unit testing we can see the results are correct, but once we retrieve the objects from the working memory it seems the order of the items has changed to pretty much random.
Is this normal and why does it happen? (Obviously, the anomaly, if any, could be corrected by just reordering the list again).
Objects are inserted this way:
Iterator<Object> it = objects.iterator();
while (it.hasNext()) {
sessionStatefull.insert(it.next());
}
Its log is achieved by adding a logger to the KieSession:
public static KieSession getStatefulKnowledgeSessionWithCallback(KieContainer kieContainer, String sessionName) {
KieSession kieSession = null;
try {
kieSession = getStatefulKnowledgeSession(kieContainer, sessionName);
kieSession.addEventListener(new RuleRuntimeEventListener() {
OutputDisplay outputDisplay = new OutputDisplay();
#Override
public void objectInserted(ObjectInsertedEvent objectInsertedEvent) {
outputDisplay.showText("getStatefulKnowledgeSessionWithCallback.INSERT", objectInsertedEvent.getObject().toString());
}
The input is always the same:
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169800, units=1.0, code=1 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169801, units=1.0, code=1 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169802, units=1.0, code=2 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169803, units=1.0, code=2 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169804, units=1.0, code=6358]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169805, units=1.0, code=6007]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169806, units=1.0, code=6007]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169807, units=1.0, code=6385]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169808, units=1.0, code=6005]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169809, units=1.0, code=6225]
The output is obtained this way:
List<Object> list = new ArrayList<Object>((Collection<Object>) sessionStatefull.getObjects());
Its log is obtained with an Iterator:
Iterator<Object> it2 = list.iterator();
while (it2.hasNext()) {
Object object = it2.next();
outputDisplay.showText("Result: ", object.toString());
}
The printed output always seems to have a random order:
Example 1:
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169809, units=1.0, code=6225]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=4, id=150107315169801, units=1.0, code=1 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169800, units=1.0, code=1 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=4, id=150107315169803, units=1.0, code=2 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169802, units=1.0, code=2 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169807, units=1.0, code=6385]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169805, units=1.0, code=6007]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169804, units=1.0, code=6358]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=4, id=150107315169806, units=1.0, code=6007]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169808, units=1.0, code=6005]
Example 2:
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169804, units=1.0, code=6358]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=4, id=150107315169803, units=1.0, code=2 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=4, id=150107315169806, units=1.0, code=6007]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169805, units=1.0, code=6007]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=4, id=150107315169801, units=1.0, code=1 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169808, units=1.0, code=6005]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169807, units=1.0, code=6385]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169800, units=1.0, code=1 ]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169809, units=1.0, code=6225]
Item [date=Tue Jul 25 00:00:00 CEST 2017, status=2, id=150107315169802, units=1.0, code=2 ]
The logger class is defined like this:
public class OutputDisplay {
public void showText(String source, String text) {
try {
long time = System.currentTimeMillis();
Date date = new Date(time);
writeLog(time+" "+date.toString()+" A message from "+source+": "+text);
} catch (Exception exception) {
exception.printStackTrace();
}
}
writeLog opens a file and adds the line. We haven't paid any attention yet to some more sophisticated logging (i.e. logback...).
Drools doesn't internally keep the order of the inserted objects. The getObjects() method you are using states this by returning a Collection instead of a List.
The logger is showing the objects in order because it is invoked as soon as a new object is inserted into the working memory.
If you want to give some logical order to your objects I would suggest you to order them after you retrieve them from the working memory.
Hope it helps,

Is it possible to calculate a local date from a UTC time representing a local midnight?

Imagine you take a local date, say 2016-12-28, in a given time zone, say America/New_York, and convert the start of that date into UTC (in this case 2016-12-28T05:00:00Z).
Is it then possible from that UTC time to get back to the original local date without knowing the time zone? All you know is that the UTC time represents some local midnight/start of day.
I imagine this is possible in certain scenarios, e.g. when the offset is rather small, but I'm not sure that there won't be two possible answers when time zones are close to the date line, i.e. when two time zones have the same time, but different dates/offsets (-10 and +14).
(This problem was originally encountered in a database where local dates where wrongly stored in UTC, and the original time zone data is difficult to retrieve again.)
It may be possible under certain constraints to identify the time zone offset (UTC-05:00), but not the original time zone (America/New_York). You could only list the possible time zones that the offset might belong to at that moment, as Howard showed in his answer. There are other edge cases that make this problem difficult:
You gave a very clear case of how one couldn't determine the date for offsets close to the International Date Line.
For example, consider 2016-12-31T10:00:00Z. That could be 2016-12-31T00:00:00-10:00 (possibly Pacific/Honolulu), or it could be 2017-01-01T00:00:00+14:00 (possibly Pacific/Tongatapu).
Both -10/+14 and -11/+13 pairings could be possible, but no inhabited places on Earth actually use -12. So if you have values that are at exactly noon, they are likely +12, unless you are dealing with ships at sea.
The local midnight value might not exist in the time zone you're expecting.
For example, 2016-10-16T03:00:00Z is the start of the day in both America/Sao_Paulo and America/Bahia (both in Brazil). However, America/Sao_Paulo's local time is 01:00, not 00:00. There is no midnight on that day, due to their DST spring-forward transition.
The local midnight value might exist twice in the time zone you're expecting.
For example, in America/Havana, both 2016-11-06T04:00:00Z and 2016-11-06T05:00:00Z have a local time of 00:00, due to their DST fall-back transition.
So, in the general case, you may be able to resolve most of these back to their original offset, but you will have ambiguities for time zones with -10, -11, +13, or +14 offsets, and for time zones with DST transitions at midnight (in spring) or at 1:00 AM (in fall). (Keep in mind spring/fall are different between northern/southern hemisphere.)
Using this free, open-source C++ library, I can compute a list of possible timezones for this problem.
Update I've rewritten the driver for this code to really explore an entire day's worth of results, and compared it to the specific examples in Matt's excellent answer.
Here's the code:
#include <iostream>
#include <vector>
template <class Duration>
std::vector<date::zoned_time<std::common_type_t<Duration, std::chrono::seconds>>>
find_by_offset(date::sys_time<Duration> tp, const std::chrono::seconds& offset)
{
using namespace std::chrono;
using namespace date;
std::vector<zoned_time<std::common_type_t<Duration, std::chrono::seconds>>> results;
auto& db = get_tzdb();
for (auto& z : db.zones)
{
if (z.get_info(tp).offset == offset)
results.push_back(make_zoned(&z, tp));
}
return results;
}
int
main()
{
using namespace date;
using namespace std::chrono;
for (auto offset = -15h; offset <= 13h; offset += 1h)
{
auto tp = sys_days{2016_y/12/28} + offset;
std::cout << "These are all the timezones it is midnight at " << format("%F %T %Z\n", tp);
auto d0 = round<days>(tp);
auto dm1 = d0 - days{1};
auto dp1 = d0 + days{1};
auto v = find_by_offset(tp, dm1 - tp);
for (auto const& zt : v)
std::cout << format("%F %T %Z %z ", zt) << zt.get_time_zone()->name() << '\n';
v = find_by_offset(tp, d0 - tp);
for (auto const& zt : v)
std::cout << format("%F %T %Z %z ", zt) << zt.get_time_zone()->name() << '\n';
v = find_by_offset(tp, dp1 - tp);
for (auto const& zt : v)
std::cout << format("%F %T %Z %z ", zt) << zt.get_time_zone()->name() << '\n';
std::cout << '\n';
}
}
The code creates a UTC timestamp and offset pair and feeds that to find_by_offset which loops over all the timezones, and queries each timezone for its offset at that UTC timestamp. If the timezone's offset matches the desired offset, a zoned_time is added to the results (a zoned_time is a pairing of a timezone with a timestamp).
Here are all of the results which might have a midnight on the date 2016-12-28:
These are all the timezones it is midnight at 2016-12-27 09:00:00 UTC
2016-12-27 00:00:00 AKST -0900 America/Anchorage
2016-12-27 00:00:00 AKST -0900 America/Juneau
2016-12-27 00:00:00 AKST -0900 America/Metlakatla
2016-12-27 00:00:00 AKST -0900 America/Nome
2016-12-27 00:00:00 AKST -0900 America/Sitka
2016-12-27 00:00:00 AKST -0900 America/Yakutat
2016-12-27 00:00:00 -09 -0900 Etc/GMT+9
2016-12-27 00:00:00 GAMT -0900 Pacific/Gambier
These are all the timezones it is midnight at 2016-12-27 10:00:00 UTC
2016-12-27 00:00:00 HST -1000 America/Adak
2016-12-27 00:00:00 -10 -1000 Etc/GMT+10
2016-12-27 00:00:00 HST -1000 HST
2016-12-27 00:00:00 HST -1000 Pacific/Honolulu
2016-12-27 00:00:00 CKT -1000 Pacific/Rarotonga
2016-12-27 00:00:00 TAHT -1000 Pacific/Tahiti
2016-12-28 00:00:00 +14 +1400 Etc/GMT-14
2016-12-28 00:00:00 WSDT +1400 Pacific/Apia
2016-12-28 00:00:00 LINT +1400 Pacific/Kiritimati
2016-12-28 00:00:00 +14 +1400 Pacific/Tongatapu
These are all the timezones it is midnight at 2016-12-27 11:00:00 UTC
2016-12-27 00:00:00 -11 -1100 Etc/GMT+11
2016-12-27 00:00:00 NUT -1100 Pacific/Niue
2016-12-27 00:00:00 SST -1100 Pacific/Pago_Pago
2016-12-28 00:00:00 +13 +1300 Etc/GMT-13
2016-12-28 00:00:00 NZDT +1300 Pacific/Auckland
2016-12-28 00:00:00 PHOT +1300 Pacific/Enderbury
2016-12-28 00:00:00 TKT +1300 Pacific/Fakaofo
2016-12-28 00:00:00 FJST +1300 Pacific/Fiji
These are all the timezones it is midnight at 2016-12-27 12:00:00 UTC
2016-12-27 00:00:00 -12 -1200 Etc/GMT+12
2016-12-28 00:00:00 +12 +1200 Asia/Anadyr
2016-12-28 00:00:00 +12 +1200 Asia/Kamchatka
2016-12-28 00:00:00 +12 +1200 Etc/GMT-12
2016-12-28 00:00:00 TVT +1200 Pacific/Funafuti
2016-12-28 00:00:00 MHT +1200 Pacific/Kwajalein
2016-12-28 00:00:00 MHT +1200 Pacific/Majuro
2016-12-28 00:00:00 NRT +1200 Pacific/Nauru
2016-12-28 00:00:00 GILT +1200 Pacific/Tarawa
2016-12-28 00:00:00 WAKT +1200 Pacific/Wake
2016-12-28 00:00:00 WFT +1200 Pacific/Wallis
These are all the timezones it is midnight at 2016-12-27 13:00:00 UTC
2016-12-28 00:00:00 +11 +1100 Antarctica/Casey
2016-12-28 00:00:00 MIST +1100 Antarctica/Macquarie
2016-12-28 00:00:00 +11 +1100 Asia/Magadan
2016-12-28 00:00:00 +11 +1100 Asia/Sakhalin
2016-12-28 00:00:00 +11 +1100 Asia/Srednekolymsk
2016-12-28 00:00:00 AEDT +1100 Australia/Currie
2016-12-28 00:00:00 AEDT +1100 Australia/Hobart
2016-12-28 00:00:00 LHDT +1100 Australia/Lord_Howe
2016-12-28 00:00:00 AEDT +1100 Australia/Melbourne
2016-12-28 00:00:00 AEDT +1100 Australia/Sydney
2016-12-28 00:00:00 +11 +1100 Etc/GMT-11
2016-12-28 00:00:00 BST +1100 Pacific/Bougainville
2016-12-28 00:00:00 VUT +1100 Pacific/Efate
2016-12-28 00:00:00 SBT +1100 Pacific/Guadalcanal
2016-12-28 00:00:00 KOST +1100 Pacific/Kosrae
2016-12-28 00:00:00 NFT +1100 Pacific/Norfolk
2016-12-28 00:00:00 NCT +1100 Pacific/Noumea
2016-12-28 00:00:00 PONT +1100 Pacific/Pohnpei
These are all the timezones it is midnight at 2016-12-27 14:00:00 UTC
2016-12-28 00:00:00 +10 +1000 Antarctica/DumontDUrville
2016-12-28 00:00:00 +10 +1000 Asia/Ust-Nera
2016-12-28 00:00:00 +10 +1000 Asia/Vladivostok
2016-12-28 00:00:00 AEST +1000 Australia/Brisbane
2016-12-28 00:00:00 AEST +1000 Australia/Lindeman
2016-12-28 00:00:00 +10 +1000 Etc/GMT-10
2016-12-28 00:00:00 CHUT +1000 Pacific/Chuuk
2016-12-28 00:00:00 ChST +1000 Pacific/Guam
2016-12-28 00:00:00 PGT +1000 Pacific/Port_Moresby
These are all the timezones it is midnight at 2016-12-27 15:00:00 UTC
2016-12-28 00:00:00 +09 +0900 Asia/Chita
2016-12-28 00:00:00 TLT +0900 Asia/Dili
2016-12-28 00:00:00 WIT +0900 Asia/Jayapura
2016-12-28 00:00:00 +09 +0900 Asia/Khandyga
2016-12-28 00:00:00 KST +0900 Asia/Seoul
2016-12-28 00:00:00 JST +0900 Asia/Tokyo
2016-12-28 00:00:00 +09 +0900 Asia/Yakutsk
2016-12-28 00:00:00 +09 +0900 Etc/GMT-9
2016-12-28 00:00:00 PWT +0900 Pacific/Palau
These are all the timezones it is midnight at 2016-12-27 16:00:00 UTC
2016-12-28 00:00:00 BNT +0800 Asia/Brunei
2016-12-28 00:00:00 CHOT +0800 Asia/Choibalsan
2016-12-28 00:00:00 HKT +0800 Asia/Hong_Kong
2016-12-28 00:00:00 +08 +0800 Asia/Irkutsk
2016-12-28 00:00:00 MYT +0800 Asia/Kuala_Lumpur
2016-12-28 00:00:00 MYT +0800 Asia/Kuching
2016-12-28 00:00:00 CST +0800 Asia/Macau
2016-12-28 00:00:00 WITA +0800 Asia/Makassar
2016-12-28 00:00:00 PHT +0800 Asia/Manila
2016-12-28 00:00:00 CST +0800 Asia/Shanghai
2016-12-28 00:00:00 SGT +0800 Asia/Singapore
2016-12-28 00:00:00 CST +0800 Asia/Taipei
2016-12-28 00:00:00 ULAT +0800 Asia/Ulaanbaatar
2016-12-28 00:00:00 AWST +0800 Australia/Perth
2016-12-28 00:00:00 +08 +0800 Etc/GMT-8
These are all the timezones it is midnight at 2016-12-27 17:00:00 UTC
2016-12-28 00:00:00 +07 +0700 Antarctica/Davis
2016-12-28 00:00:00 ICT +0700 Asia/Bangkok
2016-12-28 00:00:00 +07 +0700 Asia/Barnaul
2016-12-28 00:00:00 ICT +0700 Asia/Ho_Chi_Minh
2016-12-28 00:00:00 HOVT +0700 Asia/Hovd
2016-12-28 00:00:00 WIB +0700 Asia/Jakarta
2016-12-28 00:00:00 +07 +0700 Asia/Krasnoyarsk
2016-12-28 00:00:00 +07 +0700 Asia/Novokuznetsk
2016-12-28 00:00:00 +07 +0700 Asia/Novosibirsk
2016-12-28 00:00:00 WIB +0700 Asia/Pontianak
2016-12-28 00:00:00 +07 +0700 Asia/Tomsk
2016-12-28 00:00:00 +07 +0700 Etc/GMT-7
2016-12-28 00:00:00 CXT +0700 Indian/Christmas
These are all the timezones it is midnight at 2016-12-27 18:00:00 UTC
2016-12-28 00:00:00 +06 +0600 Antarctica/Vostok
2016-12-28 00:00:00 +06 +0600 Asia/Almaty
2016-12-28 00:00:00 +06 +0600 Asia/Bishkek
2016-12-28 00:00:00 BDT +0600 Asia/Dhaka
2016-12-28 00:00:00 +06 +0600 Asia/Omsk
2016-12-28 00:00:00 +06 +0600 Asia/Qyzylorda
2016-12-28 00:00:00 BTT +0600 Asia/Thimphu
2016-12-28 00:00:00 XJT +0600 Asia/Urumqi
2016-12-28 00:00:00 +06 +0600 Etc/GMT-6
2016-12-28 00:00:00 IOT +0600 Indian/Chagos
These are all the timezones it is midnight at 2016-12-27 19:00:00 UTC
2016-12-28 00:00:00 +05 +0500 Antarctica/Mawson
2016-12-28 00:00:00 +05 +0500 Asia/Aqtau
2016-12-28 00:00:00 +05 +0500 Asia/Aqtobe
2016-12-28 00:00:00 +05 +0500 Asia/Ashgabat
2016-12-28 00:00:00 +05 +0500 Asia/Atyrau
2016-12-28 00:00:00 +05 +0500 Asia/Dushanbe
2016-12-28 00:00:00 PKT +0500 Asia/Karachi
2016-12-28 00:00:00 +05 +0500 Asia/Oral
2016-12-28 00:00:00 +05 +0500 Asia/Samarkand
2016-12-28 00:00:00 +05 +0500 Asia/Tashkent
2016-12-28 00:00:00 +05 +0500 Asia/Yekaterinburg
2016-12-28 00:00:00 +05 +0500 Etc/GMT-5
2016-12-28 00:00:00 +05 +0500 Indian/Kerguelen
2016-12-28 00:00:00 MVT +0500 Indian/Maldives
These are all the timezones it is midnight at 2016-12-27 20:00:00 UTC
2016-12-28 00:00:00 +04 +0400 Asia/Baku
2016-12-28 00:00:00 GST +0400 Asia/Dubai
2016-12-28 00:00:00 +04 +0400 Asia/Tbilisi
2016-12-28 00:00:00 +04 +0400 Asia/Yerevan
2016-12-28 00:00:00 +04 +0400 Etc/GMT-4
2016-12-28 00:00:00 +04 +0400 Europe/Astrakhan
2016-12-28 00:00:00 +04 +0400 Europe/Samara
2016-12-28 00:00:00 +04 +0400 Europe/Saratov
2016-12-28 00:00:00 +04 +0400 Europe/Ulyanovsk
2016-12-28 00:00:00 SCT +0400 Indian/Mahe
2016-12-28 00:00:00 MUT +0400 Indian/Mauritius
2016-12-28 00:00:00 RET +0400 Indian/Reunion
These are all the timezones it is midnight at 2016-12-27 21:00:00 UTC
2016-12-28 00:00:00 EAT +0300 Africa/Khartoum
2016-12-28 00:00:00 EAT +0300 Africa/Nairobi
2016-12-28 00:00:00 +03 +0300 Antarctica/Syowa
2016-12-28 00:00:00 AST +0300 Asia/Baghdad
2016-12-28 00:00:00 +03 +0300 Asia/Famagusta
2016-12-28 00:00:00 AST +0300 Asia/Qatar
2016-12-28 00:00:00 AST +0300 Asia/Riyadh
2016-12-28 00:00:00 +03 +0300 Etc/GMT-3
2016-12-28 00:00:00 +03 +0300 Europe/Istanbul
2016-12-28 00:00:00 +03 +0300 Europe/Kirov
2016-12-28 00:00:00 +03 +0300 Europe/Minsk
2016-12-28 00:00:00 MSK +0300 Europe/Moscow
2016-12-28 00:00:00 MSK +0300 Europe/Simferopol
2016-12-28 00:00:00 +03 +0300 Europe/Volgograd
These are all the timezones it is midnight at 2016-12-27 22:00:00 UTC
2016-12-28 00:00:00 EET +0200 Africa/Cairo
2016-12-28 00:00:00 SAST +0200 Africa/Johannesburg
2016-12-28 00:00:00 CAT +0200 Africa/Maputo
2016-12-28 00:00:00 EET +0200 Africa/Tripoli
2016-12-28 00:00:00 WAST +0200 Africa/Windhoek
2016-12-28 00:00:00 EET +0200 Asia/Amman
2016-12-28 00:00:00 EET +0200 Asia/Beirut
2016-12-28 00:00:00 EET +0200 Asia/Damascus
2016-12-28 00:00:00 EET +0200 Asia/Gaza
2016-12-28 00:00:00 EET +0200 Asia/Hebron
2016-12-28 00:00:00 IST +0200 Asia/Jerusalem
2016-12-28 00:00:00 EET +0200 Asia/Nicosia
2016-12-28 00:00:00 EET +0200 EET
2016-12-28 00:00:00 +02 +0200 Etc/GMT-2
2016-12-28 00:00:00 EET +0200 Europe/Athens
2016-12-28 00:00:00 EET +0200 Europe/Bucharest
2016-12-28 00:00:00 EET +0200 Europe/Chisinau
2016-12-28 00:00:00 EET +0200 Europe/Helsinki
2016-12-28 00:00:00 EET +0200 Europe/Kaliningrad
2016-12-28 00:00:00 EET +0200 Europe/Kiev
2016-12-28 00:00:00 EET +0200 Europe/Riga
2016-12-28 00:00:00 EET +0200 Europe/Sofia
2016-12-28 00:00:00 EET +0200 Europe/Tallinn
2016-12-28 00:00:00 EET +0200 Europe/Uzhgorod
2016-12-28 00:00:00 EET +0200 Europe/Vilnius
2016-12-28 00:00:00 EET +0200 Europe/Zaporozhye
These are all the timezones it is midnight at 2016-12-27 23:00:00 UTC
2016-12-28 00:00:00 CET +0100 Africa/Algiers
2016-12-28 00:00:00 CET +0100 Africa/Ceuta
2016-12-28 00:00:00 WAT +0100 Africa/Lagos
2016-12-28 00:00:00 WAT +0100 Africa/Ndjamena
2016-12-28 00:00:00 CET +0100 Africa/Tunis
2016-12-28 00:00:00 CET +0100 CET
2016-12-28 00:00:00 +01 +0100 Etc/GMT-1
2016-12-28 00:00:00 CET +0100 Europe/Amsterdam
2016-12-28 00:00:00 CET +0100 Europe/Andorra
2016-12-28 00:00:00 CET +0100 Europe/Belgrade
2016-12-28 00:00:00 CET +0100 Europe/Berlin
2016-12-28 00:00:00 CET +0100 Europe/Brussels
2016-12-28 00:00:00 CET +0100 Europe/Budapest
2016-12-28 00:00:00 CET +0100 Europe/Copenhagen
2016-12-28 00:00:00 CET +0100 Europe/Gibraltar
2016-12-28 00:00:00 CET +0100 Europe/Luxembourg
2016-12-28 00:00:00 CET +0100 Europe/Madrid
2016-12-28 00:00:00 CET +0100 Europe/Malta
2016-12-28 00:00:00 CET +0100 Europe/Monaco
2016-12-28 00:00:00 CET +0100 Europe/Oslo
2016-12-28 00:00:00 CET +0100 Europe/Paris
2016-12-28 00:00:00 CET +0100 Europe/Prague
2016-12-28 00:00:00 CET +0100 Europe/Rome
2016-12-28 00:00:00 CET +0100 Europe/Stockholm
2016-12-28 00:00:00 CET +0100 Europe/Tirane
2016-12-28 00:00:00 CET +0100 Europe/Vienna
2016-12-28 00:00:00 CET +0100 Europe/Warsaw
2016-12-28 00:00:00 CET +0100 Europe/Zurich
2016-12-28 00:00:00 MET +0100 MET
These are all the timezones it is midnight at 2016-12-28 00:00:00 UTC
2016-12-28 00:00:00 GMT +0000 Africa/Abidjan
2016-12-28 00:00:00 GMT +0000 Africa/Accra
2016-12-28 00:00:00 GMT +0000 Africa/Bissau
2016-12-28 00:00:00 WET +0000 Africa/Casablanca
2016-12-28 00:00:00 WET +0000 Africa/El_Aaiun
2016-12-28 00:00:00 GMT +0000 Africa/Monrovia
2016-12-28 00:00:00 GMT +0000 America/Danmarkshavn
2016-12-28 00:00:00 +00 +0000 Antarctica/Troll
2016-12-28 00:00:00 WET +0000 Atlantic/Canary
2016-12-28 00:00:00 WET +0000 Atlantic/Faroe
2016-12-28 00:00:00 WET +0000 Atlantic/Madeira
2016-12-28 00:00:00 GMT +0000 Atlantic/Reykjavik
2016-12-28 00:00:00 GMT +0000 Etc/GMT
2016-12-28 00:00:00 UCT +0000 Etc/UCT
2016-12-28 00:00:00 UTC +0000 Etc/UTC
2016-12-28 00:00:00 GMT +0000 Europe/Dublin
2016-12-28 00:00:00 WET +0000 Europe/Lisbon
2016-12-28 00:00:00 GMT +0000 Europe/London
2016-12-28 00:00:00 WET +0000 WET
These are all the timezones it is midnight at 2016-12-28 01:00:00 UTC
2016-12-28 00:00:00 EGT -0100 America/Scoresbysund
2016-12-28 00:00:00 AZOT -0100 Atlantic/Azores
2016-12-28 00:00:00 CVT -0100 Atlantic/Cape_Verde
2016-12-28 00:00:00 -01 -0100 Etc/GMT+1
These are all the timezones it is midnight at 2016-12-28 02:00:00 UTC
2016-12-28 00:00:00 FNT -0200 America/Noronha
2016-12-28 00:00:00 BRST -0200 America/Sao_Paulo
2016-12-28 00:00:00 GST -0200 Atlantic/South_Georgia
2016-12-28 00:00:00 -02 -0200 Etc/GMT+2
These are all the timezones it is midnight at 2016-12-28 03:00:00 UTC
2016-12-28 00:00:00 BRT -0300 America/Araguaina
2016-12-28 00:00:00 ART -0300 America/Argentina/Buenos_Aires
2016-12-28 00:00:00 ART -0300 America/Argentina/Catamarca
2016-12-28 00:00:00 ART -0300 America/Argentina/Cordoba
2016-12-28 00:00:00 ART -0300 America/Argentina/Jujuy
2016-12-28 00:00:00 ART -0300 America/Argentina/La_Rioja
2016-12-28 00:00:00 ART -0300 America/Argentina/Mendoza
2016-12-28 00:00:00 ART -0300 America/Argentina/Rio_Gallegos
2016-12-28 00:00:00 ART -0300 America/Argentina/Salta
2016-12-28 00:00:00 ART -0300 America/Argentina/San_Juan
2016-12-28 00:00:00 ART -0300 America/Argentina/San_Luis
2016-12-28 00:00:00 ART -0300 America/Argentina/Tucuman
2016-12-28 00:00:00 ART -0300 America/Argentina/Ushuaia
2016-12-28 00:00:00 PYST -0300 America/Asuncion
2016-12-28 00:00:00 BRT -0300 America/Bahia
2016-12-28 00:00:00 BRT -0300 America/Belem
2016-12-28 00:00:00 AMST -0300 America/Campo_Grande
2016-12-28 00:00:00 GFT -0300 America/Cayenne
2016-12-28 00:00:00 AMST -0300 America/Cuiaba
2016-12-28 00:00:00 BRT -0300 America/Fortaleza
2016-12-28 00:00:00 WGT -0300 America/Godthab
2016-12-28 00:00:00 BRT -0300 America/Maceio
2016-12-28 00:00:00 PMST -0300 America/Miquelon
2016-12-28 00:00:00 UYT -0300 America/Montevideo
2016-12-28 00:00:00 SRT -0300 America/Paramaribo
2016-12-28 00:00:00 BRT -0300 America/Recife
2016-12-28 00:00:00 BRT -0300 America/Santarem
2016-12-28 00:00:00 CLST -0300 America/Santiago
2016-12-28 00:00:00 CLST -0300 Antarctica/Palmer
2016-12-28 00:00:00 -03 -0300 Antarctica/Rothera
2016-12-28 00:00:00 FKST -0300 Atlantic/Stanley
2016-12-28 00:00:00 -03 -0300 Etc/GMT+3
These are all the timezones it is midnight at 2016-12-28 04:00:00 UTC
2016-12-28 00:00:00 AST -0400 America/Barbados
2016-12-28 00:00:00 AST -0400 America/Blanc-Sablon
2016-12-28 00:00:00 AMT -0400 America/Boa_Vista
2016-12-28 00:00:00 VET -0400 America/Caracas
2016-12-28 00:00:00 AST -0400 America/Curacao
2016-12-28 00:00:00 AST -0400 America/Glace_Bay
2016-12-28 00:00:00 AST -0400 America/Goose_Bay
2016-12-28 00:00:00 AST -0400 America/Grand_Turk
2016-12-28 00:00:00 GYT -0400 America/Guyana
2016-12-28 00:00:00 AST -0400 America/Halifax
2016-12-28 00:00:00 BOT -0400 America/La_Paz
2016-12-28 00:00:00 AMT -0400 America/Manaus
2016-12-28 00:00:00 AST -0400 America/Martinique
2016-12-28 00:00:00 AST -0400 America/Moncton
2016-12-28 00:00:00 AST -0400 America/Port_of_Spain
2016-12-28 00:00:00 AMT -0400 America/Porto_Velho
2016-12-28 00:00:00 AST -0400 America/Puerto_Rico
2016-12-28 00:00:00 AST -0400 America/Santo_Domingo
2016-12-28 00:00:00 AST -0400 America/Thule
2016-12-28 00:00:00 AST -0400 Atlantic/Bermuda
2016-12-28 00:00:00 -04 -0400 Etc/GMT+4
These are all the timezones it is midnight at 2016-12-28 05:00:00 UTC
2016-12-28 00:00:00 EST -0500 America/Atikokan
2016-12-28 00:00:00 COT -0500 America/Bogota
2016-12-28 00:00:00 EST -0500 America/Cancun
2016-12-28 00:00:00 EST -0500 America/Detroit
2016-12-28 00:00:00 ACT -0500 America/Eirunepe
2016-12-28 00:00:00 ECT -0500 America/Guayaquil
2016-12-28 00:00:00 CST -0500 America/Havana
2016-12-28 00:00:00 EST -0500 America/Indiana/Indianapolis
2016-12-28 00:00:00 EST -0500 America/Indiana/Marengo
2016-12-28 00:00:00 EST -0500 America/Indiana/Petersburg
2016-12-28 00:00:00 EST -0500 America/Indiana/Vevay
2016-12-28 00:00:00 EST -0500 America/Indiana/Vincennes
2016-12-28 00:00:00 EST -0500 America/Indiana/Winamac
2016-12-28 00:00:00 EST -0500 America/Iqaluit
2016-12-28 00:00:00 EST -0500 America/Jamaica
2016-12-28 00:00:00 EST -0500 America/Kentucky/Louisville
2016-12-28 00:00:00 EST -0500 America/Kentucky/Monticello
2016-12-28 00:00:00 PET -0500 America/Lima
2016-12-28 00:00:00 EST -0500 America/Nassau
2016-12-28 00:00:00 EST -0500 America/New_York
2016-12-28 00:00:00 EST -0500 America/Nipigon
2016-12-28 00:00:00 EST -0500 America/Panama
2016-12-28 00:00:00 EST -0500 America/Pangnirtung
2016-12-28 00:00:00 EST -0500 America/Port-au-Prince
2016-12-28 00:00:00 ACT -0500 America/Rio_Branco
2016-12-28 00:00:00 EST -0500 America/Thunder_Bay
2016-12-28 00:00:00 EST -0500 America/Toronto
2016-12-28 00:00:00 EST -0500 EST
2016-12-28 00:00:00 EST -0500 EST5EDT
2016-12-28 00:00:00 -05 -0500 Etc/GMT+5
2016-12-28 00:00:00 EASST -0500 Pacific/Easter
These are all the timezones it is midnight at 2016-12-28 06:00:00 UTC
2016-12-28 00:00:00 CST -0600 America/Bahia_Banderas
2016-12-28 00:00:00 CST -0600 America/Belize
2016-12-28 00:00:00 CST -0600 America/Chicago
2016-12-28 00:00:00 CST -0600 America/Costa_Rica
2016-12-28 00:00:00 CST -0600 America/El_Salvador
2016-12-28 00:00:00 CST -0600 America/Guatemala
2016-12-28 00:00:00 CST -0600 America/Indiana/Knox
2016-12-28 00:00:00 CST -0600 America/Indiana/Tell_City
2016-12-28 00:00:00 CST -0600 America/Managua
2016-12-28 00:00:00 CST -0600 America/Matamoros
2016-12-28 00:00:00 CST -0600 America/Menominee
2016-12-28 00:00:00 CST -0600 America/Merida
2016-12-28 00:00:00 CST -0600 America/Mexico_City
2016-12-28 00:00:00 CST -0600 America/Monterrey
2016-12-28 00:00:00 CST -0600 America/North_Dakota/Beulah
2016-12-28 00:00:00 CST -0600 America/North_Dakota/Center
2016-12-28 00:00:00 CST -0600 America/North_Dakota/New_Salem
2016-12-28 00:00:00 CST -0600 America/Rainy_River
2016-12-28 00:00:00 CST -0600 America/Rankin_Inlet
2016-12-28 00:00:00 CST -0600 America/Regina
2016-12-28 00:00:00 CST -0600 America/Resolute
2016-12-28 00:00:00 CST -0600 America/Swift_Current
2016-12-28 00:00:00 CST -0600 America/Tegucigalpa
2016-12-28 00:00:00 CST -0600 America/Winnipeg
2016-12-28 00:00:00 CST -0600 CST6CDT
2016-12-28 00:00:00 -06 -0600 Etc/GMT+6
2016-12-28 00:00:00 GALT -0600 Pacific/Galapagos
These are all the timezones it is midnight at 2016-12-28 07:00:00 UTC
2016-12-28 00:00:00 MST -0700 America/Boise
2016-12-28 00:00:00 MST -0700 America/Cambridge_Bay
2016-12-28 00:00:00 MST -0700 America/Chihuahua
2016-12-28 00:00:00 MST -0700 America/Creston
2016-12-28 00:00:00 MST -0700 America/Dawson_Creek
2016-12-28 00:00:00 MST -0700 America/Denver
2016-12-28 00:00:00 MST -0700 America/Edmonton
2016-12-28 00:00:00 MST -0700 America/Fort_Nelson
2016-12-28 00:00:00 MST -0700 America/Hermosillo
2016-12-28 00:00:00 MST -0700 America/Inuvik
2016-12-28 00:00:00 MST -0700 America/Mazatlan
2016-12-28 00:00:00 MST -0700 America/Ojinaga
2016-12-28 00:00:00 MST -0700 America/Phoenix
2016-12-28 00:00:00 MST -0700 America/Yellowknife
2016-12-28 00:00:00 -07 -0700 Etc/GMT+7
2016-12-28 00:00:00 MST -0700 MST
2016-12-28 00:00:00 MST -0700 MST7MDT
These are all the timezones it is midnight at 2016-12-28 08:00:00 UTC
2016-12-28 00:00:00 PST -0800 America/Dawson
2016-12-28 00:00:00 PST -0800 America/Los_Angeles
2016-12-28 00:00:00 PST -0800 America/Tijuana
2016-12-28 00:00:00 PST -0800 America/Vancouver
2016-12-28 00:00:00 PST -0800 America/Whitehorse
2016-12-28 00:00:00 -08 -0800 Etc/GMT+8
2016-12-28 00:00:00 PST -0800 PST8PDT
2016-12-28 00:00:00 PST -0800 Pacific/Pitcairn
These are all the timezones it is midnight at 2016-12-28 09:00:00 UTC
2016-12-28 00:00:00 AKST -0900 America/Anchorage
2016-12-28 00:00:00 AKST -0900 America/Juneau
2016-12-28 00:00:00 AKST -0900 America/Metlakatla
2016-12-28 00:00:00 AKST -0900 America/Nome
2016-12-28 00:00:00 AKST -0900 America/Sitka
2016-12-28 00:00:00 AKST -0900 America/Yakutat
2016-12-28 00:00:00 -09 -0900 Etc/GMT+9
2016-12-28 00:00:00 GAMT -0900 Pacific/Gambier
These are all the timezones it is midnight at 2016-12-28 10:00:00 UTC
2016-12-28 00:00:00 HST -1000 America/Adak
2016-12-28 00:00:00 -10 -1000 Etc/GMT+10
2016-12-28 00:00:00 HST -1000 HST
2016-12-28 00:00:00 HST -1000 Pacific/Honolulu
2016-12-28 00:00:00 CKT -1000 Pacific/Rarotonga
2016-12-28 00:00:00 TAHT -1000 Pacific/Tahiti
2016-12-29 00:00:00 +14 +1400 Etc/GMT-14
2016-12-29 00:00:00 WSDT +1400 Pacific/Apia
2016-12-29 00:00:00 LINT +1400 Pacific/Kiritimati
2016-12-29 00:00:00 +14 +1400 Pacific/Tongatapu
These are all the timezones it is midnight at 2016-12-28 11:00:00 UTC
2016-12-28 00:00:00 -11 -1100 Etc/GMT+11
2016-12-28 00:00:00 NUT -1100 Pacific/Niue
2016-12-28 00:00:00 SST -1100 Pacific/Pago_Pago
2016-12-29 00:00:00 +13 +1300 Etc/GMT-13
2016-12-29 00:00:00 NZDT +1300 Pacific/Auckland
2016-12-29 00:00:00 PHOT +1300 Pacific/Enderbury
2016-12-29 00:00:00 TKT +1300 Pacific/Fakaofo
2016-12-29 00:00:00 FJST +1300 Pacific/Fiji
These are all the timezones it is midnight at 2016-12-28 12:00:00 UTC
2016-12-28 00:00:00 -12 -1200 Etc/GMT+12
2016-12-29 00:00:00 +12 +1200 Asia/Anadyr
2016-12-29 00:00:00 +12 +1200 Asia/Kamchatka
2016-12-29 00:00:00 +12 +1200 Etc/GMT-12
2016-12-29 00:00:00 TVT +1200 Pacific/Funafuti
2016-12-29 00:00:00 MHT +1200 Pacific/Kwajalein
2016-12-29 00:00:00 MHT +1200 Pacific/Majuro
2016-12-29 00:00:00 NRT +1200 Pacific/Nauru
2016-12-29 00:00:00 GILT +1200 Pacific/Tarawa
2016-12-29 00:00:00 WAKT +1200 Pacific/Wake
2016-12-29 00:00:00 WFT +1200 Pacific/Wallis
These are all the timezones it is midnight at 2016-12-28 13:00:00 UTC
2016-12-29 00:00:00 +11 +1100 Antarctica/Casey
2016-12-29 00:00:00 MIST +1100 Antarctica/Macquarie
2016-12-29 00:00:00 +11 +1100 Asia/Magadan
2016-12-29 00:00:00 +11 +1100 Asia/Sakhalin
2016-12-29 00:00:00 +11 +1100 Asia/Srednekolymsk
2016-12-29 00:00:00 AEDT +1100 Australia/Currie
2016-12-29 00:00:00 AEDT +1100 Australia/Hobart
2016-12-29 00:00:00 LHDT +1100 Australia/Lord_Howe
2016-12-29 00:00:00 AEDT +1100 Australia/Melbourne
2016-12-29 00:00:00 AEDT +1100 Australia/Sydney
2016-12-29 00:00:00 +11 +1100 Etc/GMT-11
2016-12-29 00:00:00 BST +1100 Pacific/Bougainville
2016-12-29 00:00:00 VUT +1100 Pacific/Efate
2016-12-29 00:00:00 SBT +1100 Pacific/Guadalcanal
2016-12-29 00:00:00 KOST +1100 Pacific/Kosrae
2016-12-29 00:00:00 NFT +1100 Pacific/Norfolk
2016-12-29 00:00:00 NCT +1100 Pacific/Noumea
2016-12-29 00:00:00 PONT +1100 Pacific/Pohnpei
Notes:
2016-12-28 10:00:00 UTC lists both Pacific/Honolulu and Pacific/Tongatapu in its results (and also several others).
These results list all of the -10/+14 and -11/+13 pairings, as well as a few others, but those few others only involve "sea-faring" timezones such as "Etc/GMT+12".
If you alter the program to explore 2016-10-16 America/Sao_Paulo is never listed, though it is listed for 2016-12-28 since America/Sao_Paulo has no midnight on 2016-10-16. But you do find America/Bahia listed under 2016-10-16 03:00:00 UTC (offset -0300).
Changing the program to explore 2016-11-06 shows that America/Havana gets listed both under 2016-11-06 04:00:00 UTC and 2016-11-06 05:00:00 UTC.
In none of the examples highlighted here has there been a unique timezone where it is midnight for a given UTC timepoint. There probably existed such a timepoint for a timezone with a UTC offset that is not an integral number of hours.
Ah, yes, here are a few:
These are all the timezones it is midnight at 2016-12-27 09:30:00 UTC
2016-12-27 00:00:00 MART -0930 Pacific/Marquesas
These are all the timezones it is midnight at 2016-12-27 10:15:00 UTC
2016-12-28 00:00:00 CHADT +1345 Pacific/Chatham
These are all the timezones it is midnight at 2016-12-27 14:30:00 UTC
2016-12-28 00:00:00 ACST +0930 Australia/Darwin
These are all the timezones it is midnight at 2016-12-27 15:15:00 UTC
2016-12-28 00:00:00 ACWST +0845 Australia/Eucla
These are all the timezones it is midnight at 2016-12-27 15:30:00 UTC
2016-12-28 00:00:00 KST +0830 Asia/Pyongyang
These are all the timezones it is midnight at 2016-12-27 18:15:00 UTC
2016-12-28 00:00:00 NPT +0545 Asia/Kathmandu
These are all the timezones it is midnight at 2016-12-27 19:30:00 UTC
2016-12-28 00:00:00 AFT +0430 Asia/Kabul
These are all the timezones it is midnight at 2016-12-27 20:30:00 UTC
2016-12-28 00:00:00 IRST +0330 Asia/Tehran
These are all the timezones it is midnight at 2016-12-28 03:30:00 UTC
2016-12-28 00:00:00 NST -0330 America/St_Johns
The Answer by Matt Johnson is correct.
You can get a date if you are certain the moment stored in the database represented the first moment of a day in some time zone somewhere.
You can guess about the time zone, but you cannot be certain of the original time zone when more than one zone shared an offset-from-UTC at that moment.
java.time
Here is some Java code using the modern java.time classes.
Imagine you take a local date, say 2016-12-28, in a given time zone, say America/New_York, and convert the start of that date into UTC (in this case 2016-12-28T05:00:00Z).
Notice that we let java.time determine the first moment of the day through the LocalDate::atStartOfDay method. Do not assume the day begins at 00:00:00. Anomalies such as Daylight Saving Time mean the day may start at another time such as 01:00:00.
LocalDate localDate = LocalDate.parse( "2016-12-28" ) ;
ZoneId zNewYork = ZoneId.of( "America/New_York" ) ;
ZonedDateTime zdtNewYork = localDate.atStartOfDay( zNewYork ) ; // First moment of the day in that zone on that date.
Adjust to a UTC value by extract an Instant. An Instant is always in UTC, by definition.
Instant instant = zdtNewYork.toInstant() ;
Store in the database in a column of type akin to SQL-standard TIMESTAMP WITH TIME ZONE.
myPreparedStatement.setObject( … , instant ) ;
get back to the original local date without knowing the time zone?
Retrieve.
Instant instant = myResultSet.getObject( … , Instant.class ) ;
Now experiment with every time zone. FYI, see list of zone names at Wikipedia, though that page may be outdated.
For each zone, adjust our Instant (our UTC moment) into that zone to get a ZonedDateTime object. Some moment, same point on the timeline, but different wall-clock time.
For each ZonedDateTime, extract the date only, without time-of-day and without time zone. Renders a LocalDate object. Ask that LocalDate to determine the first moment of the day (which may or may not occur at 00:00:00) in our time zone under consideration. This produces another ZonedDateTime object.
From that second ZonedDateTime, extract an Instant to adjust back into UTC. Compare this new Instant object with our original Instant. If they are the same, we have a hit. We have identified a time zone when a day began at that moment stored in the database. So the LocalDate we produced above is the same as the date originally stored in inappropriately in our database.
List< ZoneId > hits = new ArrayList<>() ;
LocalDate originalLocalDate = null ;
Set< String > zoneIds = ZoneId.getAvailableZoneIds() ; // Gets the set of available zone IDs.
for( String zoneId : zoneIds ) {
ZoneId z = ZoneId.of( zoneId ) ; // Get zone with that name.
ZonedDateTime zdt = instant.atZone( z ) ;
LocalDate ld = zdt.toLocalDate() ; // Extract the date-only value, dropping the time-of-day and dropping the time zone.
ZonedDateTime startOfDay = ld.atStartOfDay( z ) ; // Determine first moment of the day on that date in that zone.
Instant instantOfStartOfDay = startOfDay.toInstant() ; // Adjust back to UTC.
boolean hit = instant.equals( instantOfStartOfDay ) ;
if( hit ) {
originalLocalDate = ld ;
hits.add( z ) ; // Collect this time zone as the zone possibly used originally.
}
}
See this code run live at IdeOne.com.
When run we see that America/New_York time zone on that date had an offset of five hours behind UTC. You can see from this list, there are many other time zones sharing that same offset of -05:00.
originalLocalDate.toString(): 2016-12-28
hits.toString(): [America/Panama, America/Indiana/Petersburg, America/Eirunepe, Cuba, Etc/GMT+5, Pacific/Easter, America/Fort_Wayne, America/Havana, America/Porto_Acre, US/Michigan, America/Louisville, America/Guayaquil, America/Indiana/Vevay, America/Indiana/Vincennes, America/Indianapolis, America/Iqaluit, America/Kentucky/Louisville, EST5EDT, America/Nassau, America/Jamaica, America/Atikokan, America/Kentucky/Monticello, America/Coral_Harbour, America/Cayman, Chile/EasterIsland, America/Indiana/Indianapolis, America/Thunder_Bay, America/Indiana/Marengo, America/Bogota, SystemV/EST5, US/Eastern, Canada/Eastern, America/Port-au-Prince, America/Nipigon, Brazil/Acre, US/East-Indiana, America/Cancun, America/Lima, America/Rio_Branco, America/Detroit, Jamaica, America/Pangnirtung, America/Montreal, America/Indiana/Winamac, America/New_York, America/Toronto, SystemV/EST5EDT]
Beware that the resulting list of zones may not be distinct. Some zone names are aliases, where one zone has multiple names. For example, the old Asia/Calcutta is now Asia/Kolkata.
About java.time
The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.
The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.
To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.
You may exchange java.time objects directly with your database. Use a JDBC driver compliant with JDBC 4.2 or later. No need for strings, no need for java.sql.* classes.
Where to obtain the java.time classes?
Java SE 8, Java SE 9, Java SE 10, and later
Built-in.
Part of the standard Java API with a bundled implementation.
Java 9 adds some minor features and fixes.
Java SE 6 and Java SE 7
Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
Android
Later versions of Android bundle implementations of the java.time classes.
For earlier Android (<26), the ThreeTenABP project adapts ThreeTen-Backport (mentioned above). See How to use ThreeTenABP….
The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.

SBT 0.12.1 downloads wrong SNAPSHOT

I deploy some SNAPSHOT dependencies to Sonatype OSS using mvn. Sonatype stores a number of old snapshots for each coordinate. A directory listing of my deployed SNAPSHOTs is at the bottom of this question.
In my sbt Play! project, I added the Sonatype SNAPSHOT repository as a resolver.
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
// Add your own project settings here
resolvers += "Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"
)
However, the wrong SNAPSHOT is downloaded each time. While sbt should download the last deployed SNAPSHOT (20130109.225335-6) but it downloads the first deployed SNAPSHOT (20130109.210948-1).
$ rm -r ~/.ivy2/cache/edu.washington.cs.knowitall.chunkedextractor/
$ sbt clean compile
[info] Loading project definition from /scratch/github/knowitall/documentextractor/project
[info] Set current project to documentextractor (in build file:/scratch/github/knowitall/documentextractor/)
[success] Total time: 0 s, completed Jan 9, 2013 3:06:41 PM
[info] Updating {file:/scratch/github/knowitall/documentextractor/}documentextractor...
[info] downloading http://repo.typesafe.com/typesafe/snapshots/edu/washington/cs/knowitall/chunkedextractor/chunkedextractor_2.9.2/1.0.1-SNAPSHOT/chunkedextractor_2.9.2-1.0.1-20130109.210948-1.jar ...
[info] [SUCCESSFUL ] edu.washington.cs.knowitall.chunkedextractor#chunkedextractor_2.9.2;1.0.1-SNAPSHOT!chunkedextractor_2.9.2.jar (1079ms)
[info] Done updating.
Any idea how I can fix this and make sbt download the most recent SNAPSHOT? Is this an sbt-specific problem or does it have to do with Play!?
Here is the directory listing of my artifact's snapshots on Sonatype.
https://oss.sonatype.org/content/repositories/snapshots/edu/washington/cs/knowitall/chunkedextractor/chunkedextractor_2.9.2/1.0.1-SNAPSHOT/
chunkedextractor_2.9.2-1.0.1-20130109.210948-1-javadoc.jar Wed Jan 09 15:09:55 CST 2013 361379
chunkedextractor_2.9.2-1.0.1-20130109.210948-1-javadoc.jar.md5 Wed Jan 09 15:09:56 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.210948-1-javadoc.jar.sha1 Wed Jan 09 15:09:56 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.210948-1-sources.jar Wed Jan 09 15:09:53 CST 2013 17175
chunkedextractor_2.9.2-1.0.1-20130109.210948-1-sources.jar.md5 Wed Jan 09 15:09:54 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.210948-1-sources.jar.sha1 Wed Jan 09 15:09:53 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.210948-1.jar Wed Jan 09 15:09:48 CST 2013 178994
chunkedextractor_2.9.2-1.0.1-20130109.210948-1.jar.md5 Wed Jan 09 15:09:49 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.210948-1.jar.sha1 Wed Jan 09 15:09:49 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.210948-1.pom Wed Jan 09 15:09:49 CST 2013 3725
chunkedextractor_2.9.2-1.0.1-20130109.210948-1.pom.md5 Wed Jan 09 15:09:50 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.210948-1.pom.sha1 Wed Jan 09 15:09:50 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.222121-2-javadoc.jar Wed Jan 09 16:21:29 CST 2013 363291
chunkedextractor_2.9.2-1.0.1-20130109.222121-2-javadoc.jar.md5 Wed Jan 09 16:21:30 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.222121-2-javadoc.jar.sha1 Wed Jan 09 16:21:30 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.222121-2-sources.jar Wed Jan 09 16:21:27 CST 2013 17195
chunkedextractor_2.9.2-1.0.1-20130109.222121-2-sources.jar.md5 Wed Jan 09 16:21:27 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.222121-2-sources.jar.sha1 Wed Jan 09 16:21:27 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.222121-2.jar Wed Jan 09 16:21:21 CST 2013 177267
chunkedextractor_2.9.2-1.0.1-20130109.222121-2.jar.md5 Wed Jan 09 16:21:22 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.222121-2.jar.sha1 Wed Jan 09 16:21:22 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.222121-2.pom Wed Jan 09 16:21:23 CST 2013 3725
chunkedextractor_2.9.2-1.0.1-20130109.222121-2.pom.md5 Wed Jan 09 16:21:23 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.222121-2.pom.sha1 Wed Jan 09 16:21:23 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.223017-3-javadoc.jar Wed Jan 09 16:30:25 CST 2013 363291
chunkedextractor_2.9.2-1.0.1-20130109.223017-3-javadoc.jar.md5 Wed Jan 09 16:30:26 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.223017-3-javadoc.jar.sha1 Wed Jan 09 16:30:25 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.223017-3-sources.jar Wed Jan 09 16:30:22 CST 2013 17195
chunkedextractor_2.9.2-1.0.1-20130109.223017-3-sources.jar.md5 Wed Jan 09 16:30:23 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.223017-3-sources.jar.sha1 Wed Jan 09 16:30:23 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.223017-3.jar Wed Jan 09 16:30:18 CST 2013 177267
chunkedextractor_2.9.2-1.0.1-20130109.223017-3.jar.md5 Wed Jan 09 16:30:18 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.223017-3.jar.sha1 Wed Jan 09 16:30:18 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.223017-3.pom Wed Jan 09 16:30:19 CST 2013 3725
chunkedextractor_2.9.2-1.0.1-20130109.223017-3.pom.md5 Wed Jan 09 16:30:19 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.223017-3.pom.sha1 Wed Jan 09 16:30:19 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.224717-4-javadoc.jar Wed Jan 09 16:47:24 CST 2013 363343
chunkedextractor_2.9.2-1.0.1-20130109.224717-4-javadoc.jar.md5 Wed Jan 09 16:47:24 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.224717-4-javadoc.jar.sha1 Wed Jan 09 16:47:24 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.224717-4-sources.jar Wed Jan 09 16:47:21 CST 2013 17198
chunkedextractor_2.9.2-1.0.1-20130109.224717-4-sources.jar.md5 Wed Jan 09 16:47:22 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.224717-4-sources.jar.sha1 Wed Jan 09 16:47:22 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.224717-4.jar Wed Jan 09 16:47:17 CST 2013 177369
chunkedextractor_2.9.2-1.0.1-20130109.224717-4.jar.md5 Wed Jan 09 16:47:18 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.224717-4.jar.sha1 Wed Jan 09 16:47:17 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.224717-4.pom Wed Jan 09 16:47:18 CST 2013 3725
chunkedextractor_2.9.2-1.0.1-20130109.224717-4.pom.md5 Wed Jan 09 16:47:19 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.224717-4.pom.sha1 Wed Jan 09 16:47:18 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.225244-5-javadoc.jar Wed Jan 09 16:52:52 CST 2013 363343
chunkedextractor_2.9.2-1.0.1-20130109.225244-5-javadoc.jar.md5 Wed Jan 09 16:52:52 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.225244-5-javadoc.jar.sha1 Wed Jan 09 16:52:52 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.225244-5-sources.jar Wed Jan 09 16:52:49 CST 2013 17198
chunkedextractor_2.9.2-1.0.1-20130109.225244-5-sources.jar.md5 Wed Jan 09 16:52:50 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.225244-5-sources.jar.sha1 Wed Jan 09 16:52:50 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.225244-5.jar Wed Jan 09 16:52:45 CST 2013 177369
chunkedextractor_2.9.2-1.0.1-20130109.225244-5.jar.md5 Wed Jan 09 16:52:46 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.225244-5.jar.sha1 Wed Jan 09 16:52:45 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.225244-5.pom Wed Jan 09 16:52:46 CST 2013 3725
chunkedextractor_2.9.2-1.0.1-20130109.225244-5.pom.md5 Wed Jan 09 16:52:47 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.225244-5.pom.sha1 Wed Jan 09 16:52:46 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.225335-6-javadoc.jar Wed Jan 09 16:53:42 CST 2013 363343
chunkedextractor_2.9.2-1.0.1-20130109.225335-6-javadoc.jar.md5 Wed Jan 09 16:53:43 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.225335-6-javadoc.jar.sha1 Wed Jan 09 16:53:42 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.225335-6-sources.jar Wed Jan 09 16:53:40 CST 2013 17198
chunkedextractor_2.9.2-1.0.1-20130109.225335-6-sources.jar.md5 Wed Jan 09 16:53:40 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.225335-6-sources.jar.sha1 Wed Jan 09 16:53:40 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.225335-6.jar Wed Jan 09 16:53:35 CST 2013 177369
chunkedextractor_2.9.2-1.0.1-20130109.225335-6.jar.md5 Wed Jan 09 16:53:36 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.225335-6.jar.sha1 Wed Jan 09 16:53:36 CST 2013 40
chunkedextractor_2.9.2-1.0.1-20130109.225335-6.pom Wed Jan 09 16:53:36 CST 2013 3725
chunkedextractor_2.9.2-1.0.1-20130109.225335-6.pom.md5 Wed Jan 09 16:53:37 CST 2013 32
chunkedextractor_2.9.2-1.0.1-20130109.225335-6.pom.sha1 Wed Jan 09 16:53:37 CST 2013 40
maven-metadata.xml Wed Jan 09 16:53:43 CST 2013 1244
maven-metadata.xml.md5 Wed Jan 09 16:53:44 CST 2013 32
maven-metadata.xml.sha1 Wed Jan 09 16:53:43 CST 2013 40
UPDATE: build.properties specifies sbt.version=0.11.3. Maybe Play is forcing this older version of sbt.
Try if one of these might help you:
1) run 'update'
2) modify dependency to "groupId" %% "artifactId" % "version" changing() and run 'update'

iPhone:Find the current timezone offset in HOURS

How to find out the current timezone offset on the device in HOURS ?
There is a very nice NSTimeZone object which will give you the timezone offset from GMT in seconds:
float timezoneoffset = ([[NSTimeZone systemTimeZone] secondsFromGMT] / 3600.0);
For more see blog post
http://blog.indieiphonedev.com/2011/01/09/getting-the-timezone-on-the-device/
NSDate *sourceDate = [NSDate dateWithTimeIntervalSinceNow:3600 * 24 * 60];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
float timeZoneOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate] / 3600.0;
NSLog(#"sourceDate=%# timeZoneOffset=%d", sourceDate, timeZoneOffset);
For anyone looking for the current time zone offset as a string, try:
NSDateFormatter *localTimeZoneFormatter = [NSDateFormatter new];
localTimeZoneFormatter.timeZone = [NSTimeZone localTimeZone];
localTimeZoneFormatter.dateFormat = #"Z";
NSString *localTimeZoneOffset = [localTimeZoneFormatter stringFromDate:[NSDate date]];
In my time zone, localTimeZoneOffset contains -0700
Don't use an int!!!
I copied this code and now have a bug in my app.
Some timezones are .5 hrs
use this:
float offset = [timezone secondsFromGMTForDate:self.date] / 3600.0;
and don't forget the .0 behind 3600
Use NSTimeZone's localTimeZone
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSInteger seconds = [timeZone secondsFromGMT];
NSLog(#"TZ : %# : Seconds %ld",[timeZone abbreviation],(long)seconds);
int h = (int)seconds / 3600;
int m = (int)seconds / 60 % 60;
NSString *strGMT = #"";
if (h>=0)
strGMT = [NSString stringWithFormat:#"+%02d:%02d", h, m];
else
strGMT = [NSString stringWithFormat:#"%03d:%02d", h, m];
NSLog(#"GMT -/+ HH:mm: %#",strGMT);
Swift 4 extension method that returns timezone offset as a string
//: Playground - noun: a place where people can play
import Foundation
extension TimeZone {
func offsetFromGMT() -> String
{
let localTimeZoneFormatter = DateFormatter()
localTimeZoneFormatter.timeZone = self
localTimeZoneFormatter.dateFormat = "Z"
return localTimeZoneFormatter.string(from: Date())
}
}
// Test: Print all timezones
TimeZone.knownTimeZoneIdentifiers.forEach({ timeZoneIdentifier in
if let timezone = TimeZone(identifier: timeZoneIdentifier)
{
print("\(timezone.identifier) \(timezone.offsetFromGMT())")
}
})
Test Output:
Africa/Abidjan +0000
Africa/Accra +0000
Africa/Addis_Ababa +0300
Africa/Algiers +0100
Africa/Asmara +0300
Africa/Bamako +0000
Africa/Bangui +0100
Africa/Banjul +0000
Africa/Bissau +0000
Africa/Blantyre +0200
Africa/Brazzaville +0100
Africa/Bujumbura +0200
Africa/Cairo +0200
Africa/Casablanca +0100
Africa/Ceuta +0200
Africa/Conakry +0000
Africa/Dakar +0000
Africa/Dar_es_Salaam +0300
Africa/Djibouti +0300
Africa/Douala +0100
Africa/El_Aaiun +0100
Africa/Freetown +0000
Africa/Gaborone +0200
Africa/Harare +0200
Africa/Johannesburg +0200
Africa/Juba +0300
Africa/Kampala +0300
Africa/Khartoum +0200
Africa/Kigali +0200
Africa/Kinshasa +0100
Africa/Lagos +0100
Africa/Libreville +0100
Africa/Lome +0000
Africa/Luanda +0100
Africa/Lubumbashi +0200
Africa/Lusaka +0200
Africa/Malabo +0100
Africa/Maputo +0200
Africa/Maseru +0200
Africa/Mbabane +0200
Africa/Mogadishu +0300
Africa/Monrovia +0000
Africa/Nairobi +0300
Africa/Ndjamena +0100
Africa/Niamey +0100
Africa/Nouakchott +0000
Africa/Ouagadougou +0000
Africa/Porto-Novo +0100
Africa/Sao_Tome +0100
Africa/Tripoli +0200
Africa/Tunis +0100
Africa/Windhoek +0200
America/Adak -0900
America/Anchorage -0800
America/Anguilla -0400
America/Antigua -0400
America/Araguaina -0300
America/Argentina/Buenos_Aires -0300
America/Argentina/Catamarca -0300
America/Argentina/Cordoba -0300
America/Argentina/Jujuy -0300
America/Argentina/La_Rioja -0300
America/Argentina/Mendoza -0300
America/Argentina/Rio_Gallegos -0300
America/Argentina/Salta -0300
America/Argentina/San_Juan -0300
America/Argentina/San_Luis -0300
America/Argentina/Tucuman -0300
America/Argentina/Ushuaia -0300
America/Aruba -0400
America/Asuncion -0400
America/Atikokan -0500
America/Bahia -0300
America/Bahia_Banderas -0500
America/Barbados -0400
America/Belem -0300
America/Belize -0600
America/Blanc-Sablon -0400
America/Boa_Vista -0400
America/Bogota -0500
America/Boise -0600
America/Cambridge_Bay -0600
America/Campo_Grande -0400
America/Cancun -0500
America/Caracas -0400
America/Cayenne -0300
America/Cayman -0500
America/Chicago -0500
America/Chihuahua -0600
America/Costa_Rica -0600
America/Creston -0700
America/Cuiaba -0400
America/Curacao -0400
America/Danmarkshavn +0000
America/Dawson -0700
America/Dawson_Creek -0700
America/Denver -0600
America/Detroit -0400
America/Dominica -0400
America/Edmonton -0600
America/Eirunepe -0500
America/El_Salvador -0600
America/Fort_Nelson -0700
America/Fortaleza -0300
America/Glace_Bay -0300
America/Godthab -0200
America/Goose_Bay -0300
America/Grand_Turk -0400
America/Grenada -0400
America/Guadeloupe -0400
America/Guatemala -0600
America/Guayaquil -0500
America/Guyana -0400
America/Halifax -0300
America/Havana -0400
America/Hermosillo -0700
America/Indiana/Indianapolis -0400
America/Indiana/Knox -0500
America/Indiana/Marengo -0400
America/Indiana/Petersburg -0400
America/Indiana/Tell_City -0500
America/Indiana/Vevay -0400
America/Indiana/Vincennes -0400
America/Indiana/Winamac -0400
America/Inuvik -0600
America/Iqaluit -0400
America/Jamaica -0500
America/Juneau -0800
America/Kentucky/Louisville -0400
America/Kentucky/Monticello -0400
America/Kralendijk -0400
America/La_Paz -0400
America/Lima -0500
America/Los_Angeles -0700
America/Lower_Princes -0400
America/Maceio -0300
America/Managua -0600
America/Manaus -0400
America/Marigot -0400
America/Martinique -0400
America/Matamoros -0500
America/Mazatlan -0600
America/Menominee -0500
America/Merida -0500
America/Metlakatla -0800
America/Mexico_City -0500
America/Miquelon -0200
America/Moncton -0300
America/Monterrey -0500
America/Montevideo -0300
America/Montreal -0400
America/Montserrat -0400
America/Nassau -0400
America/New_York -0400
America/Nipigon -0400
America/Nome -0800
America/Noronha -0200
America/North_Dakota/Beulah -0500
America/North_Dakota/Center -0500
America/North_Dakota/New_Salem -0500
America/Ojinaga -0600
America/Panama -0500
America/Pangnirtung -0400
America/Paramaribo -0300
America/Phoenix -0700
America/Port-au-Prince -0400
America/Port_of_Spain -0400
America/Porto_Velho -0400
America/Puerto_Rico -0400
America/Punta_Arenas -0300
America/Rainy_River -0500
America/Rankin_Inlet -0500
America/Recife -0300
America/Regina -0600
America/Resolute -0500
America/Rio_Branco -0500
America/Santa_Isabel -0700
America/Santarem -0300
America/Santiago -0300
America/Santo_Domingo -0400
America/Sao_Paulo -0300
America/Scoresbysund +0000
America/Shiprock -0600
America/Sitka -0800
America/St_Barthelemy -0400
America/St_Johns -0230
America/St_Kitts -0400
America/St_Lucia -0400
America/St_Thomas -0400
America/St_Vincent -0400
America/Swift_Current -0600
America/Tegucigalpa -0600
America/Thule -0300
America/Thunder_Bay -0400
America/Tijuana -0700
America/Toronto -0400
America/Tortola -0400
America/Vancouver -0700
America/Whitehorse -0700
America/Winnipeg -0500
America/Yakutat -0800
America/Yellowknife -0600
Antarctica/Casey +1100
Antarctica/Davis +0700
Antarctica/DumontDUrville +1000
Antarctica/Macquarie +1100
Antarctica/Mawson +0500
Antarctica/McMurdo +1200
Antarctica/Palmer -0300
Antarctica/Rothera -0300
Antarctica/South_Pole +1200
Antarctica/Syowa +0300
Antarctica/Troll +0200
Antarctica/Vostok +0600
Arctic/Longyearbyen +0200
Asia/Aden +0300
Asia/Almaty +0600
Asia/Amman +0300
Asia/Anadyr +1200
Asia/Aqtau +0500
Asia/Aqtobe +0500
Asia/Ashgabat +0500
Asia/Atyrau +0500
Asia/Baghdad +0300
Asia/Bahrain +0300
Asia/Baku +0400
Asia/Bangkok +0700
Asia/Barnaul +0700
Asia/Beirut +0300
Asia/Bishkek +0600
Asia/Brunei +0800
Asia/Calcutta +0530
Asia/Chita +0900
Asia/Choibalsan +0800
Asia/Chongqing +0800
Asia/Colombo +0530
Asia/Damascus +0300
Asia/Dhaka +0600
Asia/Dili +0900
Asia/Dubai +0400
Asia/Dushanbe +0500
Asia/Famagusta +0300
Asia/Gaza +0300
Asia/Harbin +0800
Asia/Hebron +0300
Asia/Ho_Chi_Minh +0700
Asia/Hong_Kong +0800
Asia/Hovd +0700
Asia/Irkutsk +0800
Asia/Jakarta +0700
Asia/Jayapura +0900
Asia/Jerusalem +0300
Asia/Kabul +0430
Asia/Kamchatka +1200
Asia/Karachi +0500
Asia/Kashgar +0600
Asia/Kathmandu +0545
Asia/Katmandu +0545
Asia/Khandyga +0900
Asia/Krasnoyarsk +0700
Asia/Kuala_Lumpur +0800
Asia/Kuching +0800
Asia/Kuwait +0300
Asia/Macau +0800
Asia/Magadan +1100
Asia/Makassar +0800
Asia/Manila +0800
Asia/Muscat +0400
Asia/Nicosia +0300
Asia/Novokuznetsk +0700
Asia/Novosibirsk +0700
Asia/Omsk +0600
Asia/Oral +0500
Asia/Phnom_Penh +0700
Asia/Pontianak +0700
Asia/Pyongyang +0830
Asia/Qatar +0300
Asia/Qyzylorda +0600
Asia/Rangoon +0630
Asia/Riyadh +0300
Asia/Sakhalin +1100
Asia/Samarkand +0500
Asia/Seoul +0900
Asia/Shanghai +0800
Asia/Singapore +0800
Asia/Srednekolymsk +1100
Asia/Taipei +0800
Asia/Tashkent +0500
Asia/Tbilisi +0400
Asia/Tehran +0430
Asia/Thimphu +0600
Asia/Tokyo +0900
Asia/Tomsk +0700
Asia/Ulaanbaatar +0800
Asia/Urumqi +0600
Asia/Ust-Nera +1000
Asia/Vientiane +0700
Asia/Vladivostok +1000
Asia/Yakutsk +0900
Asia/Yangon +0630
Asia/Yekaterinburg +0500
Asia/Yerevan +0400
Atlantic/Azores +0000
Atlantic/Bermuda -0300
Atlantic/Canary +0100
Atlantic/Cape_Verde -0100
Atlantic/Faroe +0100
Atlantic/Madeira +0100
Atlantic/Reykjavik +0000
Atlantic/South_Georgia -0200
Atlantic/St_Helena +0000
Atlantic/Stanley -0300
Australia/Adelaide +0930
Australia/Brisbane +1000
Australia/Broken_Hill +0930
Australia/Currie +1000
Australia/Darwin +0930
Australia/Eucla +0845
Australia/Hobart +1000
Australia/Lindeman +1000
Australia/Lord_Howe +1030
Australia/Melbourne +1000
Australia/Perth +0800
Australia/Sydney +1000
Europe/Amsterdam +0200
Europe/Andorra +0200
Europe/Astrakhan +0400
Europe/Athens +0300
Europe/Belgrade +0200
Europe/Berlin +0200
Europe/Bratislava +0200
Europe/Brussels +0200
Europe/Bucharest +0300
Europe/Budapest +0200
Europe/Busingen +0200
Europe/Chisinau +0300
Europe/Copenhagen +0200
Europe/Dublin +0100
Europe/Gibraltar +0200
Europe/Guernsey +0100
Europe/Helsinki +0300
Europe/Isle_of_Man +0100
Europe/Istanbul +0300
Europe/Jersey +0100
Europe/Kaliningrad +0200
Europe/Kiev +0300
Europe/Kirov +0300
Europe/Lisbon +0100
Europe/Ljubljana +0200
Europe/London +0100
Europe/Luxembourg +0200
Europe/Madrid +0200
Europe/Malta +0200
Europe/Mariehamn +0300
Europe/Minsk +0300
Europe/Monaco +0200
Europe/Moscow +0300
Europe/Oslo +0200
Europe/Paris +0200
Europe/Podgorica +0200
Europe/Prague +0200
Europe/Riga +0300
Europe/Rome +0200
Europe/Samara +0400
Europe/San_Marino +0200
Europe/Sarajevo +0200
Europe/Saratov +0400
Europe/Simferopol +0300
Europe/Skopje +0200
Europe/Sofia +0300
Europe/Stockholm +0200
Europe/Tallinn +0300
Europe/Tirane +0200
Europe/Ulyanovsk +0400
Europe/Uzhgorod +0300
Europe/Vaduz +0200
Europe/Vatican +0200
Europe/Vienna +0200
Europe/Vilnius +0300
Europe/Volgograd +0300
Europe/Warsaw +0200
Europe/Zagreb +0200
Europe/Zaporozhye +0300
Europe/Zurich +0200
GMT +0000
Indian/Antananarivo +0300
Indian/Chagos +0600
Indian/Christmas +0700
Indian/Cocos +0630
Indian/Comoro +0300
Indian/Kerguelen +0500
Indian/Mahe +0400
Indian/Maldives +0500
Indian/Mauritius +0400
Indian/Mayotte +0300
Indian/Reunion +0400
Pacific/Apia +1300
Pacific/Auckland +1200
Pacific/Bougainville +1100
Pacific/Chatham +1245
Pacific/Chuuk +1000
Pacific/Easter -0500
Pacific/Efate +1100
Pacific/Enderbury +1300
Pacific/Fakaofo +1300
Pacific/Fiji +1200
Pacific/Funafuti +1200
Pacific/Galapagos -0600
Pacific/Gambier -0900
Pacific/Guadalcanal +1100
Pacific/Guam +1000
Pacific/Honolulu -1000
Pacific/Johnston -1000
Pacific/Kiritimati +1400
Pacific/Kosrae +1100
Pacific/Kwajalein +1200
Pacific/Majuro +1200
Pacific/Marquesas -0930
Pacific/Midway -1100
Pacific/Nauru +1200
Pacific/Niue -1100
Pacific/Norfolk +1100
Pacific/Noumea +1100
Pacific/Pago_Pago -1100
Pacific/Palau +0900
Pacific/Pitcairn -0800
Pacific/Pohnpei +1100
Pacific/Ponape +1100
Pacific/Port_Moresby +1000
Pacific/Rarotonga -1000
Pacific/Saipan +1000
Pacific/Tahiti -1000
Pacific/Tarawa +1200
Pacific/Tongatapu +1300
Pacific/Truk +1000
Pacific/Wake +1200
Pacific/Wallis +1200
Here's an easy way to do this in Swift 3:
let offsetInHours = Double(TimeZone.current.secondsFromGMT()) / 3600.0
-(void)getDeviceUTCOffset{
NSDate *date = [NSDate date];
NSTimeZone* deviceTimeZone_ = [NSTimeZone systemTimeZone];
float offset = [deviceTimeZone_ secondsFromGMTForDate:date] / 3600.0;
}
To test code - test on a device
change device Timezone in
Settings > General > Date Time
Turn off SET AUTOMATICALLY
Then tap TimeZone and choose major cities east/west of you
Run code and check float offset
Compare value to cities on this site
e.g. heres Helsinki
Standard time zone: UTC/GMT +2 hours - as of Nov
http://www.timeanddate.com/worldclock/city.html?n=101
Check against countries with British Summer Time or their equivalent.