public async Task SetTimeAsync(DateTime time) { if ((time.Kind != DateTimeKind.Utc) && (time.Kind != DateTimeKind.Local)) { throw new ArgumentException("DateTime.Kind must be either Utc or Local.", nameof(time)); } JToken resultToken = await this.ExecuteAsync("time", "get_timezone").ConfigureAwait(false); int index = resultToken.SelectToken("index").Value <int>(); if (!TZDictionary.TryGetValue(index, out TimeZoneInfo timeZoneInfo)) { timeZoneInfo = TimeZoneInformationExtensions.FromPOSIXString(resultToken.SelectToken("tz_str").Value <string>()); TZDictionary.Add(index, timeZoneInfo); } //time = time.ToUniversalTime(); time = TimeZoneInfo.ConvertTime(time, timeZoneInfo); await this.ExecuteAsync("time", "set_timezone", new JProperty("year", time.Year), new JProperty("month", time.Month), new JProperty("mday", time.Day), new JProperty("hour", time.Hour), new JProperty("min", time.Minute), new JProperty("sec", time.Second), new JProperty("index", index)).ConfigureAwait(false); }
public async Task <DateTimeOffset> GetTimeAsync() { JToken resultToken = await this.ExecuteAsync("time", "get_timezone").ConfigureAwait(false); int index = resultToken.SelectToken("index").Value <int>(); if (!TZDictionary.TryGetValue(index, out TimeZoneInfo timeZoneInfo)) { timeZoneInfo = TimeZoneInformationExtensions.FromPOSIXString(resultToken.SelectToken("tz_str").Value <string>()); TZDictionary.Add(index, timeZoneInfo); } resultToken = await this.ExecuteAsync("time", "get_time").ConfigureAwait(false); DateTime dateTime = new DateTime( resultToken.SelectToken("year").Value <int>(), resultToken.SelectToken("month").Value <int>(), resultToken.SelectToken("mday").Value <int>(), resultToken.SelectToken("hour").Value <int>(), resultToken.SelectToken("min").Value <int>(), resultToken.SelectToken("sec").Value <int>()); return(new DateTimeOffset( dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, timeZoneInfo.GetUtcOffset(dateTime))); }