.net dateTime 使用總結

項目中總會遇到對時間的處理,格式問題 還有UTC時間和LOCAL時間顯示出錯。

  • 如何設置全局的時間toString的格式,從一個是dataTime類型的時間轉成我們想要的格式:
C#中最簡單的就是直接用DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") 做,當然可以但都要寫這樣的格式有些麻煩,我們可以設置全局的時間toString的格式,重寫datetime中的一些方法來實現我們自己要的格式。
  1. 首先到global.cs文件下面 在應用啓動的時候,去加載時間格式初始化,這裏重寫了Application_BeginRequest 方法。
  2. protected void Application_BeginRequest(object sender, EventArgs e)
            {
                LocalizationSetting.SetCultureAndDateTimeFormat();
            }
    這裏是setCultureAndDateTiemFormat 方法, 重寫shortDate(),這些方法。 時間格式是配置在config中的。
      <add key="shortTimeFormat" value="HH:mm:ss" />
      <add key="shortDateFormat" value="dd/MM/yyyy" />
     public static void SetCultureAndDateTimeFormat()
            {
                var globalizationSection = GlobalizationSectionFactory.GetGlobalizationSection();
    
                var culture = new CultureInfo(globalizationSection.Culture);
                var shortDateFormat = SysParamFactory.GetSysParam<string>("shortDateFormat");
                var shortTimeFormat = SysParamFactory.GetSysParam<string>("shortTimeFormat");
                 
                if (!string.IsNullOrWhiteSpace(shortDateFormat) && !string.IsNullOrWhiteSpace(shortTimeFormat))
                {
                    culture.DateTimeFormat.ShortDatePattern = shortDateFormat;
                    culture.DateTimeFormat.LongDatePattern = shortDateFormat;
                    culture.DateTimeFormat.ShortTimePattern = shortTimeFormat;
                    culture.DateTimeFormat.LongTimePattern = shortTimeFormat;
                    culture.DateTimeFormat.FullDateTimePattern = string.Format("{0} {1}", shortDateFormat, shortTimeFormat);
                }
    
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.DefaultThreadCurrentUICulture = culture;
    
                Thread.CurrentThread.CurrentCulture = culture;
                Thread.CurrentThread.CurrentUICulture = culture;
            } 
    然後,就可以在代碼中這樣用了
    StartDate.ToLocalTime().ToShortDateString()
    最近項目返現,從前端傳過來的時間是正確的,但是在拿到之後,因爲ajax請求的這邊用到了Newtonsoft.Json 這個第三方開源的類庫,但是發現這個時間轉成object是用UTC的時間,所以一定要記得用ToLocalTime()再去轉一下才正確。     
      Newtonsoft.Json.JsonConvert.DeserializeObject<ARequestModel>(Request.Form["absenceRequestModel"]);
   
  •    字符轉成時間:c#中默認DateTime.Parse(satrtDate); 使用這個方法,日期格式必須是‘yyyy-MM-dd HH:mm:ss’這樣的格式,如果我們‘dd/MM/yyyy’有這樣的格式就要指定格式來轉換了.
var newData = DateTime.ParseExact(satrtDate, "dd/MM/yyyy",null);

  •   有時候對接接口時發現,有些時間數據格式是這個樣子的,其實也是json中的一種,"\/Date(1506788352175+0800)\/" 。
但是我發現我用Newtonsoft.Json 去把object轉成來的默認時間格式這個樣子"2017-10-01T00:19:12.1757748+08:00"。
最終網上找了下,我用了下面C#自帶的DataContractJsonSerializer 可以成功轉成上面的格式。
        public static string EntityToJson(object requestEntity)
        {
            var serializer = new DataContractJsonSerializer(requestEntity.GetType());
            MemoryStream ms = new MemoryStream();
            serializer.WriteObject(ms, requestEntity);
            byte[] myByte = new byte[ms.Length];
            ms.Position = 0;
            ms.Read(myByte, 0, (int)ms.Length);
            string dataString = Encoding.UTF8.GetString(myByte);
            ms.Close();
            return dataString;
        }
        public static T Deserialize<T>(string json)
        {
            T obj = Activator.CreateInstance<T>();
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
                return (T)serializer.ReadObject(ms);
            }
        }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章