【问题标题】:NSDateFormatter Issue - Getting wrong dateNSDateFormatter 问题 - 获取错误的日期
【发布时间】:2018-07-16 05:52:28
【问题描述】:

在 iPhone 设备中,从我们的生产应用程序中获取客户设备的错误日期时间格式。

我们使用日期时间格式为 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 中出现问题

【问题讨论】:

  • 有什么理由不能使用yyyy-MM-dd'T'HH:mm:ss 的格式吗? (抱歉,它在 Swift 中可用 - 不知道为什么你在字符串末尾得到 pm
  • 你试过设置timezone吗?
  • @iPeter 在设备中 - 时区为布里斯班。它仅在客户设备中发生,在调试时不会发生..
  • dateFormattertimeZone 设置为NSTimeZone *tz = [NSTimeZone defaultTimeZone];。看看它是否有效。
  • nsdateformatter.com 对测试有用

标签: ios objective-c ios11 nsdateformatter foundation


【解决方案1】:

只需将用单引号括起来的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 setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
    NSString *dateString = [dateFormatter stringFromDate:localDate];
    NSLog(@"CURR: %@", dateString);

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

【讨论】:

    【解决方案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];
    

    【讨论】:

    • 返回当前日期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多