jjzjj

ios - 将时区名称转换为时间 ID :s

coder 2023-09-27 原文

我发现 iOS 框架不理解正确的时区名称,例如“东部标准时间”。如果您键入:

NSLog(@"EST: %@", [NSTimeZone timeZoneWithName:@"Eastern Standard Time"]);

……你得到:

EST:(空)

相反,您必须使用时间 ID:s(较窄的区域),例如“America/New_York”:

NSLog(@"EST: %@", [NSTimeZone timeZoneWithName:@"America/New_York"]);

...然后控制台友好地响应:

EST:美国/纽约 (GMT-4) 偏移量 -14400(夏令时)

有什么方法可以将时区名称转换为时间 ID:s?因为我使用的网络 API 给我的是时区名称,而不是时间 ID:s。

最佳答案

我是这样做的。 (愚蠢的解决方案,但它有效。)我在 unicode.org 使用 Windows/TZID 时区映射并围绕一本大字典制定了一个方法。

- (NSString*) translateFromWindowsTimezone: (NSString*) timezoneName{
    NSDictionary *timezoneDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                @"Australia/Darwin", @"AUS Central Standard Time",
                                @"Asia/Kabul", @"Afghanistan Standard Time",
                                @"America/Anchorage", @"Alaskan Standard Time",
                                @"Asia/Riyadh", @"Arab Standard Time",
                                @"Asia/Baghdad", @"Arabic Standard Time",
                                @"America/Buenos_Aires", @"Argentina Standard Time",
                                @"America/Halifax", @"Atlantic Standard Time",
                                @"Asia/Baku", @"Azerbaijan Standard Time",
                                @"Atlantic/Azores",@"Azores Standard Time",
                                @"America/Bahia", @"Bahia Standard Time",
                                @"Asia/Dhaka", @"Bangladesh Standard Time",
                                @"America/Regina", @"Canada Central Standard Time",
                                @"Atlantic/Cape_Verde", @"Cape Verde Standard Time",
                                @"Asia/Yerevan", @"Caucasus Standard Time",
                                @"Australia/Adelaide", @"Cen. Australia Standard Time",
                                @"America/Guatemala", @"Central America Standard Time",
                                @"Asia/Almaty", @"Central Asia Standard Time",
                                @"America/Cuiaba", @"Central Brazilian Standard Time",
                                @"Europe/Budapest", @"Central Europe Standard Time",
                                @"Europe/Warsaw", @"Central European Standard Time",
                                @"Pacific/Guadalcanal", @"Central Pacific Standard Time",
                                @"America/Chicago", @"Central Standard Time",
                                @"America/Mexico_City", @"Central Standard Time (Mexico)",
                                @"Asia/Shanghai", @"China Standard Time",
                                @"Etc/GMT+12", @"Dateline Standard Time",
                                @"Africa/Nairobi", @"E. Africa Standard Time",
                                @"Australia/Brisbane", @"E. Australia Standard Time",
                                @"Asia/Nicosia", @"E. Europe Standard Time",
                                @"America/Sao_Paulo", @"E. South America Standard Time",
                                @"America/New_York", @"Eastern Standard Time",
                                @"Africa/Cairo", @"Egypt Standard Time",
                                @"Asia/Yekaterinburg", @"Ekaterinburg Standard Time",
                                @"Europe/Kiev", @"FLE Standard Time",
                                @"Pacific/Fiji", @"Fiji Standard Time",
                                @"Europe/London", @"GMT Standard Time",
                                @"Europe/Bucharest", @"GTB Standard Time",
                                @"Asia/Tbilisi", @"Georgian Standard Time",
                                @"America/Godthab", @"Greenland Standard Time",
                                @"Atlantic/Reykjavik", @"Greenwich Standard Time",
                                @"Pacific/Honolulu", @"Hawaiian Standard Time",
                                @"Asia/Calcutta", @"India Standard Time",
                                @"Asia/Tehran", @"Iran Standard Time",
                                @"Asia/Jerusalem", @"Israel Standard Time",
                                @"Asia/Amman", @"Jordan Standard Time",
                                @"Europe/Kaliningrad", @"Kaliningrad Standard Time",
                                @"Asia/Seoul", @"Korea Standard Time",
                                @"Indian/Mauritius", @"Mauritius Standard Time",
                                @"Asia/Beirut", @"Middle East Standard Time",
                                @"America/Montevideo", @"Montevideo Standard Time",
                                @"Africa/Casablanca", @"Morocco Standard Time",
                                @"America/Denver", @"Mountain Standard Time",
                                @"America/Chihuahua", @"Mountain Standard Time (Mexico)",
                                @"Asia/Rangoon", @"Myanmar Standard Time",
                                @"Asia/Novosibirsk", @"N. Central Asia Standard Time",
                                @"Africa/Windhoek", @"Namibia Standard Time",
                                @"Asia/Katmandu", @"Nepal Standard Time",
                                @"Pacific/Auckland", @"New Zealand Standard Time",
                                @"America/St_Johns", @"Newfoundland Standard Time",
                                @"Asia/Irkutsk", @"North Asia East Standard Time",
                                @"Asia/Krasnoyarsk", @"North Asia Standard Time",
                                @"America/Santiago", @"Pacific SA Standard Time",
                                @"America/Los_Angeles", @"Pacific Standard Time",
                                @"America/Santa_Isabel", @"Pacific Standard Time (Mexico)",
                                @"Asia/Karachi", @"Pakistan Standard Time",
                                @"America/Asuncion", @"Paraguay Standard Time",
                                @"Europe/Paris", @"Romance Standard Time",
                                @"Europe/Moscow", @"Russian Standard Time",
                                @"America/Cayenne", @"SA Eastern Standard Time",
                                @"America/Bogota", @"SA Pacific Standard Time",
                                @"America/La_Paz", @"SA Western Standard Time",
                                @"Asia/Bangkok", @"SE Asia Standard Time",
                                @"Pacific/Apia", @"Samoa Standard Time",
                                @"Asia/Singapore", @"Singapore Standard Time",
                                @"Africa/Johannesburg", @"South Africa Standard Time",
                                @"Asia/Colombo", @"Sri Lanka Standard Time",
                                @"Asia/Damascus", @"Syria Standard Time",
                                @"Asia/Taipei", @"Taipei Standard Time",
                                @"Australia/Hobart", @"Tasmania Standard Time",
                                @"Asia/Tokyo", @"Tokyo Standard Time",
                                @"Pacific/Tongatapu", @"Tonga Standard Time",
                                @"Europe/Istanbul", @"Turkey Standard Time",
                                @"America/Indianapolis", @"US Eastern Standard Time",
                                @"America/Phoenix", @"US Mountain Standard Time",
                                @"Etc/GMT", @"UTC",
                                @"Etc/GMT-12", @"UTC+12",
                                @"Etc/GMT+2", @"UTC-02",
                                @"Etc/GMT+11", @"UTC-11",
                                @"Asia/Ulaanbaatar", @"Ulaanbaatar Standard Time",
                                @"America/Caracas", @"Venezuela Standard Time",
                                @"Asia/Vladivostok", @"Vladivostok Standard Time",
                                @"Australia/Perth", @"W. Australia Standard Time",
                                @"Africa/Lagos", @"W. Central Africa Standard Time",
                                @"Europe/Berlin", @"W. Europe Standard Time",
                                @"Asia/Tashkent", @"West Asia Standard Time",
                                @"Pacific/Port_Moresby", @"West Pacific Standard Time",
                                @"Asia/Yakutsk", @"Yakutsk Standard Time", nil];
   return [timezoneDictionary objectForKey:timezoneName];
}

要使用它,只需输入:

NSString *tzidTimezoneName = [self translateFromWindowsTimezone: someWindowsTimezoneName];

如果您使用此代码,请在发现任何错误或缺少时区时发表评论!

关于ios - 将时区名称转换为时间 ID :s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25212733/

有关ios - 将时区名称转换为时间 ID :s的更多相关文章

  1. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  4. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  7. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  8. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  9. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  10. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

随机推荐