• Json中对日期的处理


    前言:Json对日期的处理很特别,我们不能简单的转换而得到我们想要的结果,需要进行特殊处理

    一、JSon序列化和反序列化对日期的处理

    JsonHelper类:

    using System.IO;
    using System.Linq;
    using System.Runtime.Serialization.Json;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Web;
    
    namespace MVCEFDbFirstTutotrials.Common
    {
        public class JsonHelper
        {
            public static void Test()
            {
                Product product = new Product()
                {
                    Name = "11",
                    Description = "11",
                    Price = 12,
                    Color = "color",
                    PublishOn = DateTime.Now
                };
                string jsonString = JsonSerializer<Product>(product);
                Product product1 = JsonDeserialize<Product>(jsonString);
            }
    
            /// <summary>    
            /// JSON序列化    
            /// </summary>    
            public static string JsonSerializer<T>(T t)
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, t);
                string jsonString = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
                //替换Json的Date字符串                
                string p = @"Date/((/d+)/+/d+/)///"; 
                MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
                Regex reg = new Regex(p);
                jsonString = reg.Replace(jsonString, matchEvaluator);
                return jsonString;
            }    
            /// <summary>    
            /// JSON反序列化    
            /// </summary>    
            public static T JsonDeserialize<T>(string jsonString)
            {
                //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"//Date(1294499956278+0800)//"格式    
                string p = @"d{4}-d{2}-d{2}sd{2}:d{2}:d{2}";
                MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
                Regex reg = new Regex(p);
                jsonString = reg.Replace(jsonString, matchEvaluator);
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
                T obj = (T)ser.ReadObject(ms);
                return obj;
            }
    
            /// <summary>    
            /// 将Json序列化的时间由/Date(1294499956278+0800)转为yyyy-MM-dd HH:mm:ss字符串    
            /// </summary>    
            private static string ConvertJsonDateToDateString(Match m)
            {
                string result = string.Empty;
                DateTime dt = new DateTime(1970, 1, 1);
                dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
                dt = dt.ToLocalTime();
                result = dt.ToString("yyyy-MM-dd HH:mm:ss");
                return result;
            }
            /// <summary>    
            /// 将时间字符串转为Json时间    
            /// </summary>    
            private static string ConvertDateStringToJsonDate(Match m)
            {
                string result = string.Empty;
                DateTime dt = DateTime.Parse(m.Groups[0].Value);
                dt = dt.ToUniversalTime();
                TimeSpan ts = dt - DateTime.Parse("1970-01-01");
                result = string.Format("\/Date({0}+0800)\/", ts.TotalMilliseconds);
                return result;
            }
        }  
    
    }

    二、前台对返回的/Date(1294499956278+0800) /日期格式进行处理:

    function ChangeDateFormat(jsondate) {
            jsondate = jsondate.replace("/Date(", "").replace(")/", "");
            if (jsondate.indexOf("+") > 0) {
                jsondate = jsondate.substring(0, jsondate.indexOf("+"));
            }
            else if (jsondate.indexOf("-") > 0) {
                jsondate = jsondate.substring(0, jsondate.indexOf("-"));
           }        
        
           var date = new Date(parseInt(jsondate, 10));
           var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
           var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
           return date.getFullYear() + "-" + month + "-" + currentDate;
       }

    简单Demo: ChangeDateFormat("/Date(1294499956278+0800)/");

    结果: 2011-1-8

  • 相关阅读:
    IP分类:A,B,C,D,E五类
    Makefile之“=”、":="、“+=”、“?=”
    Makefile之字符串函数
    Makefile之嵌套执行make
    vi中使用“/”查找字符
    Makefile学习之显示命令与出错命令
    【转】Unity中写GLSL(一)—— 简单的diffuse color
    关于编译GITHUB上的工程
    认识了一个新的手机游戏剖析工具- SnapDragon Profiler
    U3D资料收藏
  • 原文地址:https://www.cnblogs.com/panbin/p/5584609.html
Copyright © 2020-2023  润新知