我在UTC中得到一段时间,并希望附上时区缩写。我有以下代码来获取时区缩写,但它给出的格式为GMT +5.30。我想要IST。
对于美国来说,它是作为EDT提供的,我需要所有时区给出3个字母的缩写。
这可能吗?
请检查以下代码:
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSDate* sourceDate = [dateFormatter dateFromString:@"2015-03-16T13:08:17.989Z"];
NSTimeZone* destinationTimeZone = [NSTimeZone defaultTimeZone];
NSString *str =[destinationTimeZone abbreviation];
NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMMM dd yyyy, HH:mm "];
NSString* localTime = [dateFormat stringFromDate:sourceDate];
NSString* str1 = [NSString stringWithFormat:@"%@, %@",localTime, str];
NSLog(@"localTime:%@", str1);
输出结果为:
localTime:March 16 2015, 18:38 , GMT+5:30
我需要它
localTime:March 16 2015, 18:38 , IST
请帮忙!
答案 0 :(得分:2)
您可以将时区设置为您的日期,如:
[dateFormat setTimeZone:DesiredTimeZone];
然后使用日期格式化程序格式化它:
NSDateFormatter *formatter = [NSDateFormatter new];
formatter.dateFormat = @"dd MMM @ HH:mm z";
根据时区以03字母格式将代码放入z
属性。
了解更多详情click here
答案 1 :(得分:0)
IST实际上是一个含糊不清的缩写。 有Israel Standard Time,Indian Standard Time和Irish Standard Time。所有这些都缩写为IST。
虽然某些缩写可用于创建有效的NSTimeZone对象(iOS基本上猜测您想要的时区),但NSTimeZone不会返回代表多个时区的缩写。
如果你坚持使用"IST"
,你可以自己创建。只需比较secondsFromGMT
:
NSTimeZone *timezone = [NSTimeZone timeZoneWithAbbreviation:@"IST"];
NSString *abbreviation = [timezone abbreviation];
if (![[NSTimeZone abbreviationDictionary] objectForKey:abbreviation]) {
NSLog(@"\"%@\" is not a real abbreviation", abbreviation);
if (timezone.secondsFromGMT == 19800) {
abbreviation = @"IST";
}
}
NSLog(@"Abbreviation: %@", abbreviation);
答案 2 :(得分:0)
每个时区都有一个名称 area / city (少数有三个部分),例如 Europe / London 和 Asia / Kolkata < / em>的。所有这些可能有一个缩写,如果观察到夏令时有两个,并且具有相同GMT偏移的不同区域可能有不同的缩写(具有不同偏移的区域可能使用相同的缩写 - 缩写< em>不独特)。
您可以使用以下片段发现Cocoa所知道的区域:
for(NSString *zone in [NSTimeZone knownTimeZoneNames])
{
NSTimeZone *tz = [NSTimeZone timeZoneWithName:zone];
NSLog(@"%@: %@", zone, tz.abbreviation);
}
这将输出名称列表和当前缩写(如果已知)或GMT偏移(如果缩写未知)。缩写为 current ,因为它考虑了夏令时。
如果此代码显示以GMT +或GMT-开头的缩写,就像亚洲/加尔各答一样,您可以使用自己的表来查找缩写。例如。创建一个NSDictionary
,它将时区名称映射到包含一个或两个缩写的数组或字典,用于标准和夏令时。您可以将此表存储为plist并将其加载到应用程序中。
鉴于任何NSDate
和NSTimeZone
使用abbreviationForDate:
来确定OS X是否知道缩写;如果它不使用name
和isDaylightSavingsForDate:
索引到您自己的表中。
有关区域和缩写的列表,只需Google。
或强>
如果您对C级交互感到满意,可以解码存储在/usr/local/zoneinfo
中的文件,例如/usr/local/zoneinfo/Asia/Kolkata
,即从目录后面跟着区域名称形成的路径。这些是二进制文件,格式在Unix手册页tzfile(5)
中描述。 Kolkata的文件包含IST缩写(与都柏林的缩写一样)。
HTH
答案 3 :(得分:0)
当您使用此时区名称时,可以获得时区缩写。
+ (NSString *)getAbbriviationByTimeZone:(NSString *)timeZone {
if ([timeZone isEqualToString:@"America/Halifax"])
return @"ADT";
if ([timeZone isEqualToString:@"America/Juneau"])
return @"AKDT";
if ([timeZone isEqualToString:@"America/Argentina/Buenos_Aires"])
return @"ART";
if ([timeZone isEqualToString:@"America/Halifax"])
return @"AST";
if ([timeZone isEqualToString:@"Asia/Dhaka"])
return @"BDT";
if ([timeZone isEqualToString:@"America/Sao_Paulo"])
return @"BRST";
if ([timeZone isEqualToString:@"America/Sao_Paulo"])
return @"BRT";
if ([timeZone isEqualToString:@"Europe/London"])
return @"BST";
if ([timeZone isEqualToString:@"Africa/Harare"])
return @"CAT";
if ([timeZone isEqualToString:@"America/Chicago"])
return @"CDT";
if ([timeZone isEqualToString:@"Europe/Paris"])
return @"CEST";
if ([timeZone isEqualToString:@"Europe/Paris"])
return @"CET";
if ([timeZone isEqualToString:@"America/Santiago"])
return @"CLST";
if ([timeZone isEqualToString:@"America/Santiago"])
return @"CLT";
if ([timeZone isEqualToString:@"America/Bogota"])
return @"COT";
if ([timeZone isEqualToString:@"America/Chicago"])
return @"CST";
if ([timeZone isEqualToString:@"Africa/Addis_Ababa"])
return @"EAT";
if ([timeZone isEqualToString:@"America/New_York"])
return @"EDT";
if ([timeZone isEqualToString:@"Europe/Istanbul"])
return @"EEST";
if ([timeZone isEqualToString:@"Europe/Istanbul"])
return @"EET";
if ([timeZone isEqualToString:@"America/New_York"])
return @"EST";
if ([timeZone isEqualToString:@"Asia/Dubai"])
return @"GST";
if ([timeZone isEqualToString:@"Asia/Hong_Kong"])
return @"HKT";
if ([timeZone isEqualToString:@"Pacific/Honolulu"])
return @"HST";
if ([timeZone isEqualToString:@"Asia/Bangkok"])
return @"ICT";
if ([timeZone isEqualToString:@"Asia/Tehran"])
return @"IRST";
if ([timeZone isEqualToString:@"Asia/Calcutta"])
return @"IST";
if ([timeZone isEqualToString:@"Asia/Tokyo"])
return @"JST";
if ([timeZone isEqualToString:@"Asia/Seoul"])
return @"KST";
if ([timeZone isEqualToString:@"Asia/Hong_Kong"])
return @"HKT";
if ([timeZone isEqualToString:@"Europe/Moscow"])
return @"MSD";
if ([timeZone isEqualToString:@"Europe/Moscow"])
return @"MSK";
if ([timeZone isEqualToString:@"America/Denver"])
return @"MST";
if ([timeZone isEqualToString:@"Pacific/Auckland"])
return @"NZDT";
if ([timeZone isEqualToString:@"Pacific/Auckland"])
return @"NZST";
if ([timeZone isEqualToString:@"America/Los_Angeles"])
return @"PDT";
if ([timeZone isEqualToString:@"America/Lima"])
return @"PET";
if ([timeZone isEqualToString:@"Asia/Manila"])
return @"PHT";
if ([timeZone isEqualToString:@"Asia/Karachi"])
return @"PKT";
if ([timeZone isEqualToString:@"America/Los_Angeles"])
return @"PST";
if ([timeZone isEqualToString:@"Asia/Singapore"])
return @"SGT";
if ([timeZone isEqualToString:@"Africa/Lagos"])
return @"WAT";
if ([timeZone isEqualToString:@"Europe/Lisbon"])
return @"WEST";
if ([timeZone isEqualToString:@"Europe/Lisbon"])
return @"WET";
if ([timeZone isEqualToString:@"Asia/Jakarta"])
return @"WIT";
return nil;
}