iOS时间格式化遇到的坑

**前言:**最近做项目上传文件到腾讯云,在自己手上的真机上测试没有出现任何问题,提交测试后,也没出现任何问题,都可以上传到腾讯云。 可是从app store下载后,部分客户投诉上传不成功,提示以下错误信息:

-180 ERROR_CMD_COS_INVALID_PATH 非法路径

当时就蒙了,那么多测试机怎么都没问题,这么错误怎么找?只能去查查腾讯云提供的错误解决方案,然而只说了这么一条:

好吧,还是自己去查代码:

//sign, bucket都是腾讯云提供的
//zipPath 为 (~/document/XXX.db.zip)
//remotePath是通过时间戳来生成的
TXYFileUploadTask *fileTask = [[TXYFileUploadTask alloc] initWithPath:zipPath
                                                                    sign:sign
                                                                  bucket:bucket
                                                         customAttribute:nil
                                                         uploadDirectory:remotePath
                                                              msgContext:nil];

复制代码

获取remotePath的时间戳的代码如下:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYYMMddhhmmssSSS"];
NSString *date = [formatter stringFromDate:[NSDate date]];

复制代码

仔细看看,唯一可能产生变化的是沙盒那个路径,先把问题定位在沙盒路径,与腾讯云定义的规范有冲突?公司测试机都又测不出问题,于是就联系朋友,纷纷下载使用,最终还是找到一个可以出现“非法路径”的真机,说多了都是泪。

省去测试流程,发现问题所在,就是格式化日期的坑,上面的时间戳的代码,运行一下:

控制台居然显示: 格式化后字符串:2016060310:38:46.702

what happened!!! 居然没按时间格式的字符串格式化!!!出现了":",好了,这个就是问题所在,解决它的方案,设置formatter的区域:

结果就按自己定义的格式显示了,再放入项目中,发现上传成功,OK!原来是区域的问题,好吧,我来看看到底原来到底是什么鬼区域,代码如下:

Wow,居然是“zh_CN”,那为什么不按我们设置的格式格式化日期呢?非要强制设定区域之后才能正常格式化,百思不解!

####设置区域在格式化时间中的重要性####

formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
复制代码

**补充:**对于这样的小问题,强烈推荐还是用JSPatch来修复。 JSPatch分发平台:http://jspatch.com/Apps/index JSPatch转化平台:http://bang590.github.io/JSPatchConvertor/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值