如何在ASP.net?

时间:2017-11-13 16:12:51

标签: c# asp.net

我已经阅读了许多答案和文章,但我没有得到更好的解决方案。 我必须设置来自不同地区的每日,每周或每月的提醒。 即使我将时间转换为UTC,也会在该区域容易进行夏令时时出现问题。

1 个答案:

答案 0 :(得分:0)

我已使用此代码解决了这个问题。 我们将从TimezoneId获取TimeZoneInfo

var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(TimezoneId);

将DateTime转换为时间戳

   private DateTime ComputeNextUtcTimeToRun(long dateTimeStamp, TimeZoneInfo timeZoneInfo)
        {
            try
            {
                // Get the current time in the target time zone
                DateTime now = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, timeZoneInfo);

                // Compute the next local time
                DateTime scheduledLocalTime = (new DateTime(1970, 1, 1, 0, 0, 0)).AddMilliseconds(dateTimeStamp).ToLocalTime();

                if (scheduledLocalTime < now)
                {
                    scheduledLocalTime = scheduledLocalTime.AddDays(1);
                }
                // If it's invalid, advance.  The clocks shifted forward!
                if (timeZoneInfo.IsInvalidTime(scheduledLocalTime))
                {
                    return TimeZoneInfo.ConvertTimeToUtc(scheduledLocalTime.AddHours(1), timeZoneInfo);
                }
                // If it's ambiguous, pick the first instance
                if (timeZoneInfo.IsAmbiguousTime(scheduledLocalTime))
                {
                    TimeSpan offset = timeZoneInfo.GetAmbiguousTimeOffsets(scheduledLocalTime).Max();
                    DateTimeOffset dto = new DateTimeOffset(scheduledLocalTime, offset);
                    return dto.UtcDateTime;
                }
                return TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(scheduledLocalTime, DateTimeKind.Unspecified), timeZoneInfo);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

Please refer this link for more information

如果可以做得更好,请纠正我。