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 || MOONLIGHT)) || (MONOTOUCH && !INSIDE_CORLIB) || (NET_3_5 && !NET_4_0 && !BOOTSTRAP_NET_4_0)
29 using System
.Runtime
.CompilerServices
;
30 using System
.Runtime
.Serialization
;
34 public sealed partial class TimeZoneInfo
36 [SerializableAttribute
]
37 #if NET_4_0 || BOOTSTRAP_NET_4_0
38 [TypeForwardedFrom (Consts
.AssemblySystemCore_3_5
)]
40 [TypeForwardedFrom (Consts
.AssemblySystem_Core
)]
42 public struct TransitionTime
: IEquatable
<TimeZoneInfo
.TransitionTime
>, ISerializable
, IDeserializationCallback
45 public DateTime TimeOfDay
{
46 get { return timeOfDay; }
59 throw new Exception ("Day property is not valid for floating date rules");
70 throw new Exception ("Week property is not valid for fixed date rules");
78 public DayOfWeek DayOfWeek
{
82 throw new Exception ("DayOfWeek property is not valid for fixed date rules");
90 public bool IsFixedDateRule
{
91 get { return isFixedDateRule; }
94 public static TransitionTime
CreateFixedDateRule (
99 return new TransitionTime (timeOfDay
, month
, day
);
102 public static TransitionTime
CreateFloatingDateRule (
108 return new TransitionTime (timeOfDay
, month
, week
, dayOfWeek
);
111 private TransitionTime (
114 int day
) : this (timeOfDay
, month
)
116 if (day
< 1 || day
> 31)
117 throw new ArgumentOutOfRangeException ("day parameter is less than 1 or greater than 31");
120 this.isFixedDateRule
= true;
123 private TransitionTime (
127 DayOfWeek dayOfWeek
) : this (timeOfDay
, month
)
129 if (week
< 1 || week
> 5)
130 throw new ArgumentOutOfRangeException ("week parameter is less than 1 or greater than 5");
132 if (dayOfWeek
!= DayOfWeek
.Sunday
&&
133 dayOfWeek
!= DayOfWeek
.Monday
&&
134 dayOfWeek
!= DayOfWeek
.Tuesday
&&
135 dayOfWeek
!= DayOfWeek
.Wednesday
&&
136 dayOfWeek
!= DayOfWeek
.Thursday
&&
137 dayOfWeek
!= DayOfWeek
.Friday
&&
138 dayOfWeek
!= DayOfWeek
.Saturday
)
139 throw new ArgumentOutOfRangeException ("dayOfWeek parameter is not a member od DayOfWeek enumeration");
142 this.dayOfWeek
= dayOfWeek
;
143 this.isFixedDateRule
= false;
146 private TransitionTime (
150 if (timeOfDay
.Year
!= 1 || timeOfDay
.Month
!= 1 || timeOfDay
.Day
!= 1)
151 throw new ArgumentException ("timeOfDay parameter has a non-default date component");
153 if (timeOfDay
.Kind
!= DateTimeKind
.Unspecified
)
154 throw new ArgumentException ("timeOfDay parameter Kind's property is not DateTimeKind.Unspecified");
156 if (timeOfDay
.Ticks
% TimeSpan
.TicksPerMillisecond
!= 0)
157 throw new ArgumentException ("timeOfDay parameter does not represent a whole number of milliseconds");
159 if (month
< 1 || month
> 12)
160 throw new ArgumentOutOfRangeException ("month parameter is less than 1 or greater than 12");
162 this.timeOfDay
= timeOfDay
;
166 this.dayOfWeek
= (System
.DayOfWeek
)(-1);
168 this.isFixedDateRule
= false;
171 public static bool operator == (TransitionTime t1
, TransitionTime t2
)
173 return ( t1
.day
== t2
.day
&&
174 t1
.dayOfWeek
== t2
.dayOfWeek
&&
175 t1
.isFixedDateRule
== t2
.isFixedDateRule
&&
176 t1
.month
== t2
.month
&&
177 t1
.timeOfDay
== t2
.timeOfDay
&&
181 public static bool operator != (TransitionTime t1
, TransitionTime t2
)
188 void ISerializable
.GetObjectData (SerializationInfo info
, StreamingContext context
)
190 public void GetObjectData (SerializationInfo info
, StreamingContext context
)
193 throw new NotImplementedException ();
196 public override bool Equals (object other
)
198 if (other
is TransitionTime
)
199 return this == (TransitionTime
) other
;
203 public bool Equals (TimeZoneInfo
.TransitionTime other
)
205 return this == other
;
208 public override int GetHashCode ()
210 return (day ^
(int)dayOfWeek ^ month ^
(int)timeOfDay
.Ticks ^ week
);
214 void IDeserializationCallback
.OnDeserialization (object sender
)
216 public void OnDeserialization (object sender
)
219 throw new NotImplementedException ();