From 0d822597a12cf7e2aa4750ac463dfe0e7385eeee Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 28 Mar 2019 16:07:01 -0600 Subject: [PATCH] specify locale when timestamp parsing --- SignalServiceKit/src/Contacts/ContactDiscoveryService.m | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/SignalServiceKit/src/Contacts/ContactDiscoveryService.m b/SignalServiceKit/src/Contacts/ContactDiscoveryService.m index 1fe6c1dd7..38565bab8 100644 --- a/SignalServiceKit/src/Contacts/ContactDiscoveryService.m +++ b/SignalServiceKit/src/Contacts/ContactDiscoveryService.m @@ -624,6 +624,15 @@ NSError *ContactDiscoveryServiceErrorMakeWithReason(NSInteger code, NSString *re NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; [dateFormatter setTimeZone:timeZone]; [dateFormatter setDateFormat:@"yyy-MM-dd'T'HH:mm:ss.SSSSSS"]; + + // Specify parsing locale + // from: https://developer.apple.com/library/archive/qa/qa1480/_index.html + // Q: I'm using NSDateFormatter to parse an Internet-style date, but this fails for some users in some regions. + // I've set a specific date format string; shouldn't that force NSDateFormatter to work independently of the user's + // region settings? A: No. While setting a date format string will appear to work for most users, it's not the right + // solution to this problem. There are many places where format strings behave in unexpected ways. [...] + NSLocale *enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; + [dateFormatter setLocale:enUSPOSIXLocale]; NSDate *timestampDate = [dateFormatter dateFromString:signatureBodyEntity.timestamp]; if (!timestampDate) { OWSFailDebug(@"Could not parse signature body timestamp: %@", signatureBodyEntity.timestamp);