【问题标题】:Convert between date formats in Objective-C在 Objective-C 中的日期格式之间转换
【发布时间】:2015-03-23 14:12:30
【问题描述】:

我正在尝试将日期转换为不同的格式。我以 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];

【问题讨论】:

  • 你是怎么得到格式的?日/月/年?也许试试@"dd-MM-yyyy"。
  • @Rob:我正在以“Tue Mar 24 08:28:48 IST 2015”这种格式获取日期作为字符串,我正在尝试将其更改为“dd-MM-yyyy”。跨度>
  • 我将 dateFromString 设为 nil。在获得 nil 值之后,无论 dateFormatter2 输出什么,这都只是 nil。

标签: objective-c nsdateformatter ios8.1


【解决方案1】:

语言环境 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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    相关资源
    最近更新 更多