我一直在使用MMMM yyyy
unicode日期时间格式http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns来生成月份年。它适用于英语和各种拉丁语言。但我收到的投诉是芬兰的日期不正确。
在Mac上生成的日期(由NSDateFormatter
生成)如下:
kesäkuuta 2014
toukokuuta 2014
huhtikuuta 2014
但他们应该 - 至少,据我们软件的芬兰用户说:
kesäkuu 2014
toukokuu 2014
huhtikuu 2014 …
我不懂芬兰语,所以我不明白ta
后缀是如何工作的。无论如何,是否有人知道如何在日期格式化程序中指定一些变体来正确格式化芬兰语中的日期,而不会弄乱其他语言?
(我已尝试使用MMM
但保留ta
后缀但不更改它,AND缩写为英文月份,所以不是。“
根据此IBM页面,MMMM
看起来不包含ta
。 http://publib.boulder.ibm.com/infocenter/forms/v3r5m0/index.jsp?topic=/com.ibm.form.designer.locales.doc/i_xfdl_r_formats_fi_FI.html很难想象它在Mac OS中是一个错误。
或者,另一个Google搜索显示IBM有这样的错误:http://www-01.ibm.com/support/docview.wss?uid=swg1OA22258
无论如何,是否有任何了解芬兰语的Mac开发人员,谁了解这个问题,以及可能会发生什么?
答案 0 :(得分:21)
好的,我把这报告为苹果的一个错误,我收到了一个非常有用的回复,所以我想我会在这里分享。
Engineering已确定您需要根据以下内容解决此问题:
你永远不应该设置格式" MMMM yyyy"如果你想使用各种语言,直接在NSDateFormatter中;有些人可能有第一年等等。
如果您想要使用完整月份名称MMMM +年份的格式,则应将其作为"模板"到NSDateFormatter dateFormatFromTemplate:像这样: NSString * format = [NSDateFormatter dateFormatFromTemplate:@" yMMMM" options:0 locale:locale];
对于芬兰语语言环境,这会产生日期格式" LLLL y"这将产生月份名称的正确主格形式:tammikuu,helmikuu,maaliskuu等。
包括芬兰语和许多斯拉夫语言在内的许多语言使用月份名称的主格形式,没有日期编号,以及具有日期编号的月份名称的属格形式或某种相关形式(芬兰语的部分)。 NSDateFormatter有两个,MMMM指的是genitive形式,LLLL指的是主格形式。 [NSDateFormatter dateFormatFromTemplate ...]可以根据模板中的字段确定使用哪一个。因此,您提供了一个指定MMMM或LLLL的模板,它将以结果格式映射到正确的表单。
请注意,在此类模板中,空格和标点符号会被忽略;它们将被确定为指定区域设置的正确日期格式数据的一部分。
有关模式字符的更多信息,例如MMM和LLL,请参阅 http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
有关dateFormatFromTemplate的信息,请参阅 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/clm/NSDateFormatter/dateFormatFromTemplate:options:locale:
这里的问题是开发人员在使用NSDateFormatter时需要解决的问题; NSDateFormatter的行为符合预期。
刚才注意到,我遗漏了一个重要的部分:通过传递模板获取格式字符串后 [NSDateFormatter dateFormatFromTemplate ...] 然后 格式字符串是应该设置的字符串 [NSDateFormatter setDateFormat:...] (也许这很明显,但值得一说)