如何在目标C中格式化日期?

时间:2019-03-04 21:01:53

标签: ios objective-c xcode

我现在基本上已经有了这段代码,并且我试图通过在它们之间插入新行来进行格式化,但是它没有给我新行。我做得对吗?

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_DB"];
dateFormatter.locale = twoHourLocale;
formatString = [NSDateFormatter dateFormatFromTemplate:@"EEEE \n hh:mm" options:0 locale:[NSLocale currentLocale]];
[dateFormatter setDateFormat:formatString];

2 个答案:

答案 0 :(得分:1)

  

我现在基本上已经有了这段代码,并且我试图通过在它们之间插入新行来进行格式化,但是它没有给我新行。我做得对吗?

调用-dateFormatFromTemplate:locale:options:的目的是取回针对指定语言环境正确格式化的格式字符串。也就是说,该方法将查看您指定的日期组件,并安排它们以适合当地的习惯,例如美国的“ Jan 2 2019”,欧洲的“ 2019年1月2日”。我认为它基本上会忽略模板中未被识别为日期组件说明符的任何部分。如果要移动日期部分,它将如何知道将不知道的非日期部分放置在何处?

如果您不关心其他语言环境,而只想在其中包含换行符的日期,则可以跳过该方法,自己创建模板字符串:

formatString = @"EEEE \n hh:mm";
[dateFormatter setDateFormat:formatString];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"%@", dateString);

上面的代码将在工作日和时间之间用换行符记录当前日期,因此-stringFromDate:将很高兴使用您的格式字符串并保留换行符。

如果您确实关心语言环境,但仍希望换行,则必须创建自己的特定于语言环境的日期格式字符串,或致电{{1 }},然后在结果的正确位置插入换行符。

答案 1 :(得分:0)

似乎应该基于以下问题工作:Format date on 2 lines

但是,这很快,因此可能会有不同的实现细节。最坏的情况是,您可以将“ EEEE”和“ hh:mm”分成两个不同的格式化程序,并将它们连接起来。