項目中總會遇到對時間的處理,格式問題 還有UTC時間和LOCAL時間顯示出錯。
- 如何設置全局的時間toString的格式,從一個是dataTime類型的時間轉成我們想要的格式:
C#中最簡單的就是直接用DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") 做,當然可以但都要寫這樣的格式有些麻煩,我們可以設置全局的時間toString的格式,重寫datetime中的一些方法來實現我們自己要的格式。
- 首先到global.cs文件下面 在應用啓動的時候,去加載時間格式初始化,這裏重寫了Application_BeginRequest 方法。
這裏是setCultureAndDateTiemFormat 方法, 重寫shortDate(),這些方法。 時間格式是配置在config中的。protected void Application_BeginRequest(object sender, EventArgs e) { LocalizationSetting.SetCultureAndDateTimeFormat(); }
<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; }
最近項目返現,從前端傳過來的時間是正確的,但是在拿到之後,因爲ajax請求的這邊用到了Newtonsoft.Json 這個第三方開源的類庫,但是發現這個時間轉成object是用UTC的時間,所以一定要記得用ToLocalTime()再去轉一下才正確。StartDate.ToLocalTime().ToShortDateString()
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);
}
}