ios开发 中文(真机)环境下的时间格式转换问题

在处理从新浪微博获取的"Tue May 30 20:10:04 +0800 2014"格式时间字符串转换时,遇到问题。在特定语言环境下,转换结果为nil。通过模拟器调试发现,真机中文环境下日期会显示"CST"后缀。解决方法是调整dateFormatter属性来正确解析带有"CST"的时间字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在处理从新浪微博传回来的时间格式转换问题时发现了一个问题。新浪返回的时间格式为 "Tue May 30 20:10:04 +0800 2014",也就是说我们应该用类似"EEE MMM dd HH:mm:ss Z yyyy"这样的格式进行转换。然而按照如下方法进行转换的时候返回的date总是nil。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss Z yyyy"];
NSDate *testDate = [dateFormatter dateFromString:@"Tue May 30 14:10:02 +0800 2014"];

可能大家拷贝代码自己去试试的话会发现:没有问题啊,返回的并不是nil啊。

如果你有这样的问题,那么我想问一下,你是用什么测试的?语言环境是什么?


出现这个问题的时候,无奈从HH:mm:ss开始慢慢试,看一下哪里出了问题。后来发现其他的都正常,一旦到了MMM和EEE的时候就出问题了。后来一次在模拟器上调试的时候突然正常了。所以我打印了真机下的date对象的时间。发现中文环境下时间会有一个CST(China Standard Time)后缀。

所以接下来重新设置了dateFormatter的一些属性,如下

        //时间格式转换
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        //另中文(真机)环境下也能正常转换
        [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US"]];
        //新浪微博返回时间格式
        [dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss Z yyyy"];
        NSDate *testDate = [dateFormatter dateFromString:weiboTime];
        //设置成 月份-日期 小时:分钟 的格式
        dateFormatter.dateFormat = @"MM-dd HH:mm";
        weiboTime = [dateFormatter stringFromDate:testDate];

这样返回的时间就可以转换了,不会出现nil date的现象了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值