34
    NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd-MM-YYYY HH:mm"];        
    [formatter setTimeZone:[NSTimeZone systemTimeZone]];

如果我选择MM我得到月份的数字:09-05-2012 15:33 如果我选择MMMM我得到月份的单词:09-May-2012 15:33

我想要的是 3 个字母缩写的月份。
例如:January将是Jan

在这种情况下,May 是正确的,因为它只有 3 个字母。

4

7 回答 7

56

你有没有试过:[formatter setDateFormat:@"dd-MMM-YYYY HH:mm"];然后[formatter stringFromDate:someNSDate];

于 2012-05-09T15:00:04.103 回答
30

如果你以错误的顺序得到这两件事,你就不会得到预期的输出。

[formatter setDateFormat:@"MMM"];
[formatter setDateStyle:NSDateFormatterMediumStyle];

不给出与以下相同的结果:

[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setDateFormat:@"MMM"];

(这两个片段中的第二个现在很高兴在我的应用程序中分发 Sep Oct 等)

于 2012-08-21T16:47:41.090 回答
7

SWIFT中

let dateFormatter = NSDateFormatter()

dateFormatter.dateFormat = "dd MMM yyyy HH:mm"

dateFormatter.stringFromDate(NSDate())
于 2016-02-09T10:07:10.450 回答
3

这是一个精简的解决方案,可与 Swift 4 一起生成 3 个字母的月输出:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM YYYY, HH:mm:ss"

并验证:

print(dateFormatter.string(from: Date())) // 20 Mar 2018, 23:41:40

如前所述,MMM是获取所需月份输出的正确语法。

于 2018-03-21T06:43:47.323 回答
2

对于 swift 4 来说:

if let dateFormatter = DateFormatter(){
    dateFormatter.dateStyle = .medium
    // eventually:
    //let locale = Locale(identifier: ...                       
    //dateFormatter!.locale = locale
    dateFormatter.dateStyle = .medium
    dateFormatter!.dateFormat = "dd MMM YYYY, HH:mm:ss"
 } else..
        ..
于 2018-03-13T15:35:35.630 回答
1

实际上,您可以将 dateStyle 设置为中等(即“Jan”、“Feb”等),如下所示:

[formatter setDateStyle:NSDateFormatterMediumStyle];
于 2012-05-09T15:03:45.023 回答
0

对于那些没有通过“MMM”获得整整一个月的人,您可以通过

dateFormatter.dateFormat = "dd MMMM yyyy"

在 Swift 4.2 上测试

于 2019-10-05T23:37:08.690 回答