在Objective-C中的日期格式之间转换

时间:2015-03-23 14:12:31

标签: objective-c nsdateformatter ios8.1

我正在尝试将日期转换为其他格式。我使用以下格式接收我的日期作为NSString:EEE MMM dd HH:mm:ss ZZZ yyyy,并尝试将其更改为以下格式:dd-mm-yy。但是,我无法以所需的格式获得它。

这是我目前的代码:

    NSString *dateStr = [NSString stringWithFormat:@"%@",[dict valueForKey:@"createdOn"]];

    [dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss zzz yyyy"];
    NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"IST"];
    dateFormatter.timeZone = gmt;
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    NSDate *dateFromString = [dateFormatter dateFromString:dateStr];

    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
    [dateFormatter2 setDateFormat:@"dd/mm/yyyy"];
    NSString *newDateString = [dateFormatter2 stringFromDate:dateFromString];

1 个答案:

答案 0 :(得分:2)

区域设置en_US无法理解IST时区缩写。但en_IN确实:

NSString *dateStr = @"Tue Mar 24 08:28:48 IST 2015";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss zzz yyyy"];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_IN"];
NSDate *dateFromString = [dateFormatter dateFromString:dateStr];

作为John Skeet points out,问题可能源于IST不是唯一的事实。 IST代表Israel Standard TimeIndia Standard Time。因此,当您指定印度语区域设置时,它会做出合理的假设,但对于美国语言环境,它可以理解为混淆。


不相关,但请确保在输出格式化程序中使用MM而不是mm

NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
[dateFormatter2 setDateFormat:@"dd/MM/yyyy"];
NSString *newDateString = [dateFormatter2 stringFromDate:dateFromString];