using Luban.Job.Cfg.DataVisitors; using Luban.Job.Cfg.Utils; using System; namespace Luban.Job.Cfg.Datas { public class DDateTime : DType { public DateTime Time { get; } //public int UnixTime { get; } private readonly int _localTime; public override string TypeName => "datetime"; public DDateTime(DateTime time) { this.Time = time; // time.Kind == DateTimeKind.Unspecified // DateTimeOffset把它当作Local处理 this._localTime = (int)new DateTimeOffset(time).ToUnixTimeSeconds(); } public override bool Equals(object obj) { return obj is DDateTime d && Time == d.Time; } public override int GetHashCode() { return _localTime.GetHashCode(); } public string ToFormatString() { return DataUtil.FormatDateTime(Time); } public int GetUnixTime(TimeZoneInfo asTimeZone) { if (asTimeZone == null || asTimeZone == TimeZoneInfo.Local) { return this._localTime; } else { var destDateTime = TimeZoneInfo.ConvertTime(Time, asTimeZone, TimeZoneInfo.Utc); return (int)new DateTimeOffset(destDateTime).ToUnixTimeSeconds(); } } public override void Apply(IDataActionVisitor visitor, T x) { visitor.Accept(this, x); } public override void Apply(IDataActionVisitor visitor, T1 x, T2 y) { visitor.Accept(this, x, y); } public override TR Apply(IDataFuncVisitor visitor) { return visitor.Accept(this); } public override TR Apply(IDataFuncVisitor visitor, T x) { return visitor.Accept(this, x); } } }