71 lines
1.9 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|