System.TimeZoneInfo.ConvertTimeFromUtc C# (CSharp) Method

ConvertTimeFromUtc() private method

private ConvertTimeFromUtc ( System.DateTime dateTime ) : System.DateTime
dateTime System.DateTime
return System.DateTime
		private DateTime ConvertTimeFromUtc (DateTime dateTime)
		{
			if (dateTime.Kind == DateTimeKind.Local)
				throw new ArgumentException ("Kind property of dateTime is Local");

			if (this == TimeZoneInfo.Utc)
				return DateTime.SpecifyKind (dateTime, DateTimeKind.Utc);

			var utcOffset = GetUtcOffset (dateTime);

			var kind = (this == TimeZoneInfo.Local)? DateTimeKind.Local : DateTimeKind.Unspecified;

			DateTime result;
			if (!TryAddTicks (dateTime, utcOffset.Ticks, out result, kind))
				return DateTime.SpecifyKind (DateTime.MaxValue, kind);

			return result;
		}

Same methods

TimeZoneInfo::ConvertTimeFromUtc ( System.DateTime dateTime, TimeZoneInfo destinationTimeZone ) : System.DateTime

Usage Example

Esempio n. 1
0
        public void TestTimeZone()
        {
            TimeZone GMT = TimeZone.FindSystemTimeZoneById("GMT Standard Time");
            TimeZone EST = TimeZone.FindSystemTimeZoneById("Eastern Standard Time");

            // Calendar startTime = Calendar.getInstance(EST);
            var startTime = new DateTime(2006, 3, 7, 7, 0, 0, DateTimeKind.Utc);

            startTime = TimeZone.ConvertTimeFromUtc(startTime, EST);


            // Same timezone
            {
                NthIncludedDayTrigger t = new NthIncludedDayTrigger("name", "group");
                t.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly;
                t.N            = 3;
                t.StartTimeUtc = startTime.ToUniversalTime();
                t.FireAtTime   = "8:00";
                t.TimeZone     = EST;

                DateTime?firstTime = t.ComputeFirstFireTimeUtc(null);

                // Calendar firstTimeCal = Calendar.getInstance(EST);
                DateTime firstTimeCal = new DateTime(startTime.Year, startTime.Month, startTime.Day, 8, 0, 0, 0, DateTimeKind.Utc);
                firstTimeCal = TimeZone.ConvertTimeFromUtc(firstTimeCal, EST);
                //roll start date forward to first day of the next week
                while (firstTimeCal.DayOfWeek != t.TriggerCalendarFirstDayOfWeek)
                {
                    firstTimeCal = firstTimeCal.AddDays(-1);
                }

                //first day of the week counts as one. add two more to get N=3.
                firstTimeCal = firstTimeCal.AddDays(2);

                //if we went back too far, shift forward a week.
                if (firstTimeCal < startTime)
                {
                    firstTimeCal = firstTimeCal.AddDays(7);
                }

                Assert.AreEqual(firstTime, firstTimeCal);
            }

            // Different timezones
            {
                NthIncludedDayTrigger t = new NthIncludedDayTrigger("name", "group");
                t.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly;
                t.N            = 3;
                t.StartTimeUtc = startTime;
                t.FireAtTime   = "8:00";
                t.TimeZone     = GMT;

                DateTime?firstTime = t.ComputeFirstFireTimeUtc(null);
                // Calendar firstTimeCal = Calendar.getInstance(EST);
                DateTime firstTimeCal = new DateTime(startTime.Year, startTime.Month, startTime.Day, 8, 0, 0, 0);

                //EST is GMT-5
                firstTimeCal.AddHours(-5);

                //roll start date forward to first day of the next week
                while (firstTimeCal.DayOfWeek != t.TriggerCalendarFirstDayOfWeek)
                {
                    firstTimeCal = firstTimeCal.AddDays(-1);
                }

                //first day of the week counts as one. add two more to get N=3.
                firstTimeCal = firstTimeCal.AddDays(2);

                //if we went back too far, shift forward a week.
                if (firstTimeCal < startTime)
                {
                    firstTimeCal = firstTimeCal.AddDays(7);
                }

                Assert.AreEqual(firstTime, firstTimeCal);
            }
        }
All Usage Examples Of System.TimeZoneInfo::ConvertTimeFromUtc