2 * System.TimeZoneInfo.TransitionTime
5 * Stephane Delcroix <stephane@delcroix.org>
7 * Permission is hereby granted, free of charge, to any person obtaining
8 * a copy of this software and associated documentation files (the
9 * "Software"), to deal in the Software without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sublicense, and/or sell copies of the Software, and to
12 * permit persons to whom the Software is furnished to do so, subject to
13 * the following conditions:
15 * The above copyright notice and this permission notice shall be
16 * included in all copies or substantial portions of the Software.
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 #if (INSIDE_CORLIB && (NET_4_0 || BOOTSTRAP_NET_4_0)) || (NET_2_1 && !INSIDE_CORLIB) || (NET_3_5 && !NET_4_0 && !BOOTSTRAP_NET_4_0)
29 using System
.Runtime
.Serialization
;
33 public sealed partial class TimeZoneInfo
35 [SerializableAttribute
]
36 public struct TransitionTime
: IEquatable
<TimeZoneInfo
.TransitionTime
>, ISerializable
, IDeserializationCallback
39 public DateTime TimeOfDay
{
40 get { return timeOfDay; }
53 throw new Exception ("Day property is not valid for floating date rules");
64 throw new Exception ("Week property is not valid for fixed date rules");
72 public DayOfWeek DayOfWeek
{
76 throw new Exception ("DayOfWeek property is not valid for fixed date rules");
84 public bool IsFixedDateRule
{
85 get { return isFixedDateRule; }
88 public static TransitionTime
CreateFixedDateRule (
93 return new TransitionTime (timeOfDay
, month
, day
);
96 public static TransitionTime
CreateFloatingDateRule (
102 return new TransitionTime (timeOfDay
, month
, week
, dayOfWeek
);
105 private TransitionTime (
108 int day
) : this (timeOfDay
, month
)
110 if (day
< 1 || day
> 31)
111 throw new ArgumentOutOfRangeException ("day parameter is less than 1 or greater than 31");
114 this.isFixedDateRule
= true;
117 private TransitionTime (
121 DayOfWeek dayOfWeek
) : this (timeOfDay
, month
)
123 if (week
< 1 || week
> 5)
124 throw new ArgumentOutOfRangeException ("week parameter is less than 1 or greater than 5");
126 if (dayOfWeek
!= DayOfWeek
.Sunday
&&
127 dayOfWeek
!= DayOfWeek
.Monday
&&
128 dayOfWeek
!= DayOfWeek
.Tuesday
&&
129 dayOfWeek
!= DayOfWeek
.Wednesday
&&
130 dayOfWeek
!= DayOfWeek
.Thursday
&&
131 dayOfWeek
!= DayOfWeek
.Friday
&&
132 dayOfWeek
!= DayOfWeek
.Saturday
)
133 throw new ArgumentOutOfRangeException ("dayOfWeek parameter is not a member od DayOfWeek enumeration");
136 this.dayOfWeek
= dayOfWeek
;
137 this.isFixedDateRule
= false;
140 private TransitionTime (
144 if (timeOfDay
.Year
!= 1 || timeOfDay
.Month
!= 1 || timeOfDay
.Day
!= 1)
145 throw new ArgumentException ("timeOfDay parameter has a non-default date component");
147 if (timeOfDay
.Kind
!= DateTimeKind
.Unspecified
)
148 throw new ArgumentException ("timeOfDay parameter Kind's property is not DateTimeKind.Unspecified");
150 if (timeOfDay
.Ticks
% TimeSpan
.TicksPerMillisecond
!= 0)
151 throw new ArgumentException ("timeOfDay parameter does not represent a whole number of milliseconds");
153 if (month
< 1 || month
> 12)
154 throw new ArgumentOutOfRangeException ("month parameter is less than 1 or greater than 12");
156 this.timeOfDay
= timeOfDay
;
160 this.dayOfWeek
= (System
.DayOfWeek
)(-1);
162 this.isFixedDateRule
= false;
165 public static bool operator == (TransitionTime t1
, TransitionTime t2
)
167 return ( t1
.day
== t2
.day
&&
168 t1
.dayOfWeek
== t2
.dayOfWeek
&&
169 t1
.isFixedDateRule
== t2
.isFixedDateRule
&&
170 t1
.month
== t2
.month
&&
171 t1
.timeOfDay
== t2
.timeOfDay
&&
175 public static bool operator != (TransitionTime t1
, TransitionTime t2
)
180 public void GetObjectData (SerializationInfo info
, StreamingContext context
)
182 throw new NotImplementedException ();
185 public override bool Equals (object other
)
187 if (other
is TransitionTime
)
188 return this == (TransitionTime
) other
;
192 public bool Equals (TimeZoneInfo
.TransitionTime other
)
194 return this == other
;
197 public override int GetHashCode ()
199 return (day ^
(int)dayOfWeek ^ month ^
(int)timeOfDay
.Ticks ^ week
);
202 public void OnDeserialization (object sender
)
204 throw new NotImplementedException ();