irc-netcore-api/IRaCIS.Core.API/_ServiceExtensions/NewtonsoftJson/JSONCustomDateConverter.cs

71 lines
1.9 KiB
C#

using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
namespace IRaCIS.Core.API
{
public class JSONCustomDateConverter : DateTimeConverterBase
{
private TimeZoneInfo _timeZoneInfo;
private string _dateFormat;
private IUserInfo _userInfo;
public JSONCustomDateConverter(string dateFormat, TimeZoneInfo timeZoneInfo, IUserInfo userInfo)
{
_dateFormat = dateFormat;
_timeZoneInfo = timeZoneInfo;
_userInfo = userInfo;
}
private static readonly TimeZoneInfo ChinaTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Asia/Shanghai");
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.ValueType == typeof(DateTime))
{
DateTime dateTime = (DateTime)reader.Value;
var zoneTime = TimeZoneInfo.ConvertTime(dateTime, ChinaTimeZone);
return zoneTime;
}
else
{
return reader.Value;
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var timeZoneId = _userInfo.TimeZoneId;
//var needConvertUtcDateTime = Convert.ToDateTime(value);
//var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
//var dateTimeOffset = new DateTimeOffset(needConvertUtcDateTime);
//var time = TimeZoneInfo.ConvertTimeFromUtc(needConvertUtcDateTime, tz).ToString(_dateFormat);
//writer.WriteValue(time);
//writer.Flush();
if (value is DateTime dateTime)
{
DateTime chinaTime = TimeZoneInfo.ConvertTime(dateTime, ChinaTimeZone);
writer.WriteValue(chinaTime);
}
}
}
}