我发现 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/
我的目标是转换表单输入,例如“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看起来疯狂不安全。所以,功能正常,
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
这道题是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[
这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作: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作为该等式的第二部分,但这仍然是主要问题。
如何在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中能不能做到类似的简洁?我可以只
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里