NSDateFormatter问题-错误的日期

时间:2018-07-16 05:52:28

标签: ios objective-c ios11 nsdateformatter foundation

在iPhone设备中,从我们的生产应用程序中为客户设备获取了错误的DateTime格式。

我们使用DateTime格式作为yyyy-MM-dd HH:mm:ss并将空替换为T 并且结果为2018-07-13T15:07:36,但获取日期时间为2018-07-13T3:07:36TPM

复制步骤: 获取日期时间字符串的方法

+ (NSString *)getCurrentLocalDateTime
{
    NSDate *localDate = [NSDate date];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSString *dateString = [dateFormatter stringFromDate:localDate];
    dateString = [dateString stringByReplacingOccurrencesOfString:@" " withString:@"T"];
    NSLog(@"CURR: %@", dateString);

    return dateString; // yyyy-MM-ddTHH:mm:ss
}

预期结果: 输出数据必须为-2018-07-13T15:07:36

实际结果: 实际数据-2018-07-13T3:07:36TPM

问题在iOS版本中发生-11.3.1和11.1.2

2 个答案:

答案 0 :(得分:3)

只需将用单引号引起来的T插入日期格式即可获得文字“ T”

@"yyyy-MM-dd'T'HH:mm:ss"

对于固定格式日期,根据Technical Q&A QA1480,将日期格式程序的locale设置为固定值en_US_POSIX

+(NSString *)getCurrentLocalDateTime
{
    NSDate *localDate = [NSDate date];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
    [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
    NSString *dateString = [dateFormatter stringFromDate:localDate];
    NSLog(@"CURR: %@", dateString);

    return dateString; // yyyy-MM-ddTHH:mm:ss
}

答案 1 :(得分:-2)

以下是NSDateFormatter的示例。您可以使用它并自定义 day:month:year

的顺序
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy HH:mm"];

NSDate *currentDate = [NSDate date];
NSString *dateString = [formatter stringFromDate:currentDate];