OC处理.Net Json时间格式

通过服务器收到的json时间格式是/Date(xxxxxxxxxxxxx+xxxx)/,其中前半部分是自1970年的millionSecs,后半部是时区,我们需要对齐进行转换。

解决方式有两种,第一种就是在服务端将时间转换为字符串再发送,那样在IOS端直接用NSDateFormater就能获得时间

如果你对服务端没选择的话,就要自己转换了

只要明白xxxxxxxxxxxxx+xxxx的格式的意义我们就有思路了

首先通过正则表达式取出时间部分和时区部分,计算就可以了

代码如下

+ (NSDate *)DateFromDotNetJSONString:(NSString *)string {
    static NSRegularExpression *dateRegEx = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        dateRegEx = [[NSRegularExpression alloc] initWithPattern:@"^\\/date\\((-?\\d++)(?:([+-])(\\d{2})(\\d{2}))?\\)\\/$" options:NSRegularExpressionCaseInsensitive error:nil];
    });
    NSTextCheckingResult *regexResult = [dateRegEx firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];

    if (regexResult) {
        // milliseconds
        NSTimeInterval seconds = [[string substringWithRange:[regexResult rangeAtIndex:1]] doubleValue] / 1000.0;
        // timezone offset
        if ([regexResult rangeAtIndex:2].location != NSNotFound) {
            NSString *sign = [string substringWithRange:[regexResult rangeAtIndex:2]];
            // hours
            seconds += [[NSString stringWithFormat:@"%@%@", sign, [string substringWithRange:[regexResult rangeAtIndex:3]]] doubleValue] * 60.0 * 60.0;
            // minutes
            seconds += [[NSString stringWithFormat:@"%@%@", sign, [string substringWithRange:[regexResult rangeAtIndex:4]]] doubleValue] * 60.0;
        }

        return [NSDate dateWithTimeIntervalSince1970:seconds];
    }
    return nil;
}
时间: 2024-10-06 20:39:20

OC处理.Net Json时间格式的相关文章

EasyUI的DataGrid日期列(datebox)正确显示json时间格式

问题描述: 前端使用EasyUI,后台使用Spring MVC, 数据库里面存储的时间格式为:2014-06-10,但是后台返回给前台页面的数据是json格式的,类似于:1402367297000的形式,日期列datebox是无法解析的.具体如下图: 自己也是EasyUI小白,网上查查资料,倒腾下总算搞出来了,这里做下记录. 一般情况下我们所需的日期格式都是:2014-02-02或者2014/09/09形式的,因此首先要考虑实现一个添加日期格式化的插件. jQuery日期格式化 在自己的js中添

解析json时间格式

1 //转换json格式时间的方法 如Date(1340239979000)转换为正常 2 function ConvertJSONDateToJSDateObject(JSONDateString) { 3 var date = new Date(parseInt(JSONDateString.replace("/Date(", "").replace(")/", ""), 10)); 4 var year = date.g

obj 转为Json 时间格式自定义

var tb = evnWarningBll.GatWarning();             var  timeFormat = new IsoDateTimeConverter();            timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";            _context.Response.Write(JsonResultHelper.JsonResult(true, "查询成功!",

JavaScriptSerializer 序列化json 时间格式

        Model m = new Model { Id = 1, Dt = DateTime.Now };         JavaScriptSerializer js = new JavaScriptSerializer();         string str = js.Serialize(m);         str = Regex.Replace(str, @"\\/Date\((\d+)\)\\/", match =>          {       

.net时间格式与彻夜未眠的我

夜已经很深了,外面的狂风还在呜呜的叫着,我的脚已经冰凉冰凉...从11点半到现在我一直在测试为什么正确的Json格式字符串传到服务器后还在报400错误... 尼玛啊,以前测试是没有问题的啊 事情是这样,我的ios在将一个类转换为字典后用AFNetwork传输到服务器,以前好好现在在一直报400错误,检查了几遍程序,最后只能这样了,输出字典的Json字符串,用fiddler测试服务端...只好翻出以前的测试过的Json字符串... 一一对比,目前的json字符串比原来多了一个时间两个id值,一并删

将json的时间格式转换成正常的时间格式

/** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q) 可以用 1-2 个占位符 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) * eg: * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 * (new Date())

时间格式的时间 转json的时候变成正常的string时间20170519

public class JsonDateValueProcessor implements JsonValueProcessor { private String format ="yyyyMMdd"; public JsonDateValueProcessor() { super(); } public JsonDateValueProcessor(String format) { super(); this.format = format; } @Override public

Newtonsoft.Json 序列化和反序列化 时间格式【转】

1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain00"; a.Hobby="eat eat"; string jsonStr=JsonConvert.SerializeObject(a); 2.JSON反序列化 string jsonstr = "jsonString";Class model = JsonCo

JSON时间转换格式化(将数字时间转换为可视化的yyyy-MM-dd HH:mm:ss的格式)

参考: http://blog.csdn.net/u012992462/article/details/47042535 http://www.cnblogs.com/kissdodog/p/5419923.html 内容: 通常JSON时间一般是这样的格式. /Date(1436595149269)/ 通常我们用AJAX获取下来的JSON数据,如果有时间,都是这种格式的.其中,中间的一段数字"1436595149269"表示的是1970年1月1日至今的毫秒数. 这种时间格式并不能够直