Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DateTime.cs
Go to the documentation of this file.
8
9namespace System;
10
13[TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
14public readonly struct DateTime : IComparable, ISpanFormattable, IFormattable, IConvertible, IComparable<DateTime>, IEquatable<DateTime>, ISerializable, IAdditionOperators<DateTime, TimeSpan, DateTime>, IAdditiveIdentity<DateTime, TimeSpan>, IComparisonOperators<DateTime, DateTime>, IEqualityOperators<DateTime, DateTime>, IMinMaxValue<DateTime>, ISpanParseable<DateTime>, IParseable<DateTime>, ISubtractionOperators<DateTime, TimeSpan, DateTime>, ISubtractionOperators<DateTime, DateTime, TimeSpan>
15{
16 private sealed class LeapSecondCache
17 {
19
21 }
22
23 private static readonly uint[] s_daysToMonth365 = new uint[13]
24 {
25 0u, 31u, 59u, 90u, 120u, 151u, 181u, 212u, 243u, 273u,
26 304u, 334u, 365u
27 };
28
29 private static readonly uint[] s_daysToMonth366 = new uint[13]
30 {
31 0u, 31u, 60u, 91u, 121u, 152u, 182u, 213u, 244u, 274u,
32 305u, 335u, 366u
33 };
34
35 public static readonly DateTime MinValue;
36
37 public static readonly DateTime MaxValue = new DateTime(3155378975999999999L, DateTimeKind.Unspecified);
38
39 public static readonly DateTime UnixEpoch = new DateTime(621355968000000000L, DateTimeKind.Utc);
40
41 private readonly ulong _dateData;
42
43 internal static readonly bool s_systemSupportsLeapSeconds = SystemSupportsLeapSeconds();
44
46
48
49 private static ReadOnlySpan<byte> DaysInMonth365 => new byte[12]
50 {
51 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
52 30, 31
53 };
54
55 private static ReadOnlySpan<byte> DaysInMonth366 => new byte[12]
56 {
57 31, 29, 31, 30, 31, 30, 31, 31, 30, 31,
58 30, 31
59 };
60
61 private ulong UTicks => _dateData & 0x3FFFFFFFFFFFFFFFuL;
62
63 private ulong InternalKind => _dateData & 0xC000000000000000uL;
64
66 {
67 get
68 {
69 ulong uTicks = UTicks;
70 return new DateTime((uTicks - uTicks % 864000000000L) | InternalKind);
71 }
72 }
73
74 public int Day => GetDatePart(3);
75
76 public DayOfWeek DayOfWeek => (DayOfWeek)((uint)((int)(UTicks / 864000000000L) + 1) % 7u);
77
78 public int DayOfYear => GetDatePart(1);
79
80 public int Hour => (int)((uint)(UTicks / 36000000000L) % 24);
81
83 {
84 [MethodImpl(MethodImplOptions.AggressiveInlining)]
85 get
86 {
87 return InternalKind switch
88 {
89 0uL => DateTimeKind.Unspecified,
90 4611686018427387904uL => DateTimeKind.Utc,
91 _ => DateTimeKind.Local,
92 };
93 }
94 }
95
96 public int Millisecond => (int)(UTicks / 10000 % 1000);
97
98 public int Minute => (int)(UTicks / 600000000 % 60);
99
100 public int Month => GetDatePart(2);
101
102 public static DateTime Now
103 {
104 get
105 {
109 long num = utcNow.Ticks + ticks;
110 if ((ulong)num <= 3155378975999999999uL)
111 {
113 {
114 return new DateTime((ulong)num | 0x8000000000000000uL);
115 }
116 return new DateTime((ulong)num | 0xC000000000000000uL);
117 }
118 return new DateTime((num < 0) ? 9223372036854775808uL : 12378751012854775807uL);
119 }
120 }
121
122 public int Second => (int)(UTicks / 10000000 % 60);
123
124 public long Ticks => (long)(_dateData & 0x3FFFFFFFFFFFFFFFL);
125
126 public TimeSpan TimeOfDay => new TimeSpan((long)(UTicks % 864000000000L));
127
128 public static DateTime Today => Now.Date;
129
130 public int Year => GetDatePart(0);
131
132 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
134
135 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
137
138 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
140
141 public unsafe static DateTime UtcNow
142 {
143 get
144 {
145 System.Runtime.CompilerServices.Unsafe.SkipInit(out ulong num);
147 ulong num2 = num;
149 {
151 ulong num3 = num2 - leapSecondCache.OSFileTimeTicksAtStartOfValidityWindow;
152 if (num3 < 3000000000u)
153 {
154 return new DateTime(leapSecondCache.DotnetDateDataAtStartOfValidityWindow + num3);
155 }
157 }
158 return new DateTime(num2 + 5116597250427387904L);
159 }
160 }
161
162 public DateTime(long ticks)
163 {
164 if ((ulong)ticks > 3155378975999999999uL)
165 {
167 }
168 _dateData = (ulong)ticks;
169 }
170
171 private DateTime(ulong dateData)
172 {
174 }
175
176 internal static DateTime UnsafeCreate(long ticks)
177 {
178 return new DateTime((ulong)ticks);
179 }
180
181 public DateTime(long ticks, DateTimeKind kind)
182 {
183 if ((ulong)ticks > 3155378975999999999uL)
184 {
186 }
187 if ((uint)kind > 2u)
188 {
190 }
191 _dateData = (ulong)ticks | ((ulong)(uint)kind << 62);
192 }
193
194 internal DateTime(long ticks, DateTimeKind kind, bool isAmbiguousDst)
195 {
196 if ((ulong)ticks > 3155378975999999999uL)
197 {
199 }
200 _dateData = (ulong)ticks | (isAmbiguousDst ? 13835058055282163712uL : 9223372036854775808uL);
201 }
202
203 private static void ThrowTicksOutOfRange()
204 {
206 }
207
208 private static void ThrowInvalidKind()
209 {
211 }
212
213 private static void ThrowMillisecondOutOfRange()
214 {
215 throw new ArgumentOutOfRangeException("millisecond", SR.Format(SR.ArgumentOutOfRange_Range, 0, 999));
216 }
217
218 private static void ThrowDateArithmetic(int param)
219 {
220 throw new ArgumentOutOfRangeException(param switch
221 {
222 0 => "value",
223 1 => "t",
224 _ => "months",
226 }
227
228 public DateTime(int year, int month, int day)
229 {
230 _dateData = DateToTicks(year, month, day);
231 }
232
233 public DateTime(int year, int month, int day, Calendar calendar)
234 : this(year, month, day, 0, 0, 0, calendar)
235 {
236 }
237
238 public DateTime(int year, int month, int day, int hour, int minute, int second)
239 {
240 if (second != 60 || !s_systemSupportsLeapSeconds)
241 {
242 _dateData = DateToTicks(year, month, day) + TimeToTicks(hour, minute, second);
243 return;
244 }
245 this = new DateTime(year, month, day, hour, minute, 59);
247 }
248
249 public DateTime(int year, int month, int day, int hour, int minute, int second, DateTimeKind kind)
250 {
251 if ((uint)kind > 2u)
252 {
254 }
255 if (second != 60 || !s_systemSupportsLeapSeconds)
256 {
257 ulong num = DateToTicks(year, month, day) + TimeToTicks(hour, minute, second);
258 _dateData = num | (ulong)((long)kind << 62);
259 }
260 else
261 {
262 this = new DateTime(year, month, day, hour, minute, 59, kind);
264 }
265 }
266
267 public DateTime(int year, int month, int day, int hour, int minute, int second, Calendar calendar)
268 {
269 if (calendar == null)
270 {
271 throw new ArgumentNullException("calendar");
272 }
273 if (second != 60 || !s_systemSupportsLeapSeconds)
274 {
275 _dateData = calendar.ToDateTime(year, month, day, hour, minute, second, 0).UTicks;
276 return;
277 }
278 this = new DateTime(year, month, day, hour, minute, 59, calendar);
280 }
281
282 public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond)
283 {
284 if ((uint)millisecond >= 1000u)
285 {
287 }
288 if (second != 60 || !s_systemSupportsLeapSeconds)
289 {
290 ulong num = DateToTicks(year, month, day) + TimeToTicks(hour, minute, second);
291 num += (uint)(millisecond * 10000);
292 _dateData = num;
293 }
294 else
295 {
296 this = new DateTime(year, month, day, hour, minute, 59, millisecond);
298 }
299 }
300
301 public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind)
302 {
303 if ((uint)millisecond >= 1000u)
304 {
306 }
307 if ((uint)kind > 2u)
308 {
310 }
311 if (second != 60 || !s_systemSupportsLeapSeconds)
312 {
313 ulong num = DateToTicks(year, month, day) + TimeToTicks(hour, minute, second);
314 num += (uint)(millisecond * 10000);
315 _dateData = num | (ulong)((long)kind << 62);
316 }
317 else
318 {
319 this = new DateTime(year, month, day, hour, minute, 59, millisecond, kind);
321 }
322 }
323
324 public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar)
325 {
326 if (calendar == null)
327 {
328 throw new ArgumentNullException("calendar");
329 }
330 if (second != 60 || !s_systemSupportsLeapSeconds)
331 {
332 _dateData = calendar.ToDateTime(year, month, day, hour, minute, second, millisecond).UTicks;
333 return;
334 }
335 this = new DateTime(year, month, day, hour, minute, 59, millisecond, calendar);
337 }
338
339 public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar, DateTimeKind kind)
340 {
341 if (calendar == null)
342 {
343 throw new ArgumentNullException("calendar");
344 }
345 if ((uint)millisecond >= 1000u)
346 {
348 }
349 if ((uint)kind > 2u)
350 {
352 }
353 if (second != 60 || !s_systemSupportsLeapSeconds)
354 {
355 ulong uTicks = calendar.ToDateTime(year, month, day, hour, minute, second, millisecond).UTicks;
356 _dateData = uTicks | (ulong)((long)kind << 62);
357 }
358 else
359 {
360 this = new DateTime(year, month, day, hour, minute, 59, millisecond, calendar, kind);
362 }
363 }
364
372
374 {
375 if (info == null)
376 {
378 }
379 bool flag = false;
381 while (true)
382 {
383 if (enumerator.MoveNext())
384 {
385 string name = enumerator.Name;
386 if (!(name == "ticks"))
387 {
388 if (name == "dateData")
389 {
391 break;
392 }
393 }
394 else
395 {
397 flag = true;
398 }
399 continue;
400 }
401 if (flag)
402 {
403 break;
404 }
406 }
407 if (UTicks > 3155378975999999999L)
408 {
410 }
411 }
412
414 {
415 return AddTicks(value._ticks);
416 }
417
418 private DateTime Add(double value, int scale)
419 {
420 double num = value * (double)scale + ((value >= 0.0) ? 0.5 : (-0.5));
421 if (num <= -315537897600000.0 || num >= 315537897600000.0)
422 {
424 }
425 return AddTicks((long)num * 10000);
426 static void ThrowOutOfRange()
427 {
429 }
430 }
431
432 public DateTime AddDays(double value)
433 {
434 return Add(value, 86400000);
435 }
436
437 public DateTime AddHours(double value)
438 {
439 return Add(value, 3600000);
440 }
441
443 {
444 return Add(value, 1);
445 }
446
447 public DateTime AddMinutes(double value)
448 {
449 return Add(value, 60000);
450 }
451
453 {
455 {
457 }
458 GetDate(out var year, out var month, out var day);
459 int num = year;
460 int num2 = day;
461 int num3 = month + months;
462 if (num3 > 0)
463 {
464 int num4 = (int)((uint)(num3 - 1) / 12u);
465 num += num4;
466 num3 -= num4 * 12;
467 }
468 else
469 {
470 num += num3 / 12 - 1;
471 num3 = 12 + num3 % 12;
472 }
473 if (num < 1 || num > 9999)
474 {
476 }
478 uint num5 = array[num3 - 1];
479 int num6 = (int)(array[num3] - num5);
480 if (num2 > num6)
481 {
482 num2 = num6;
483 }
484 uint num7 = (uint)((int)(DaysToYear((uint)num) + num5) + num2 - 1);
485 return new DateTime(((ulong)((long)num7 * 864000000000L) + UTicks % 864000000000L) | InternalKind);
486 }
487
488 public DateTime AddSeconds(double value)
489 {
490 return Add(value, 1000);
491 }
492
494 {
495 ulong num = (ulong)(Ticks + value);
496 if (num > 3155378975999999999L)
497 {
499 }
500 return new DateTime(num | InternalKind);
501 }
502
503 internal bool TryAddTicks(long value, out DateTime result)
504 {
505 ulong num = (ulong)(Ticks + value);
506 if (num > 3155378975999999999L)
507 {
508 result = default(DateTime);
509 return false;
510 }
511 result = new DateTime(num | InternalKind);
512 return true;
513 }
514
516 {
518 {
520 }
521 GetDate(out var year, out var month, out var day);
522 int num = year + value;
523 if (num < 1 || num > 9999)
524 {
526 }
527 uint num2 = DaysToYear((uint)num);
528 int num3 = month - 1;
529 int num4 = day - 1;
530 if (IsLeapYear(num))
531 {
533 }
534 else
535 {
536 if (num4 == 28 && num3 == 1)
537 {
538 num4--;
539 }
541 }
542 num2 += (uint)num4;
543 return new DateTime(((ulong)((long)num2 * 864000000000L) + UTicks % 864000000000L) | InternalKind);
544 }
545
546 public static int Compare(DateTime t1, DateTime t2)
547 {
548 long ticks = t1.Ticks;
549 long ticks2 = t2.Ticks;
550 if (ticks > ticks2)
551 {
552 return 1;
553 }
554 if (ticks < ticks2)
555 {
556 return -1;
557 }
558 return 0;
559 }
560
561 public int CompareTo(object? value)
562 {
563 if (value == null)
564 {
565 return 1;
566 }
567 if (!(value is DateTime))
568 {
570 }
571 return Compare(this, (DateTime)value);
572 }
573
575 {
576 return Compare(this, value);
577 }
578
579 [MethodImpl(MethodImplOptions.AggressiveInlining)]
580 private static ulong DateToTicks(int year, int month, int day)
581 {
582 if (year < 1 || year > 9999 || month < 1 || month > 12 || day < 1)
583 {
585 }
587 if ((uint)day > array[month] - array[month - 1])
588 {
590 }
591 uint num = (uint)((int)(DaysToYear((uint)year) + array[month - 1]) + day - 1);
592 return (ulong)num * 864000000000uL;
593 }
594
595 [MethodImpl(MethodImplOptions.AggressiveInlining)]
596 private static uint DaysToYear(uint year)
597 {
598 uint num = year - 1;
599 uint num2 = num / 100;
600 return num * 1461 / 4 - num2 + num2 / 4;
601 }
602
603 [MethodImpl(MethodImplOptions.AggressiveInlining)]
604 private static ulong TimeToTicks(int hour, int minute, int second)
605 {
606 if ((uint)hour >= 24u || (uint)minute >= 60u || (uint)second >= 60u)
607 {
609 }
610 int num = hour * 3600 + minute * 60 + second;
611 return (ulong)(uint)num * 10000000uL;
612 }
613
614 internal static ulong TimeToTicks(int hour, int minute, int second, int millisecond)
615 {
616 ulong num = TimeToTicks(hour, minute, second);
617 if ((uint)millisecond >= 1000u)
618 {
620 }
621 return num + (uint)(millisecond * 10000);
622 }
623
624 public static int DaysInMonth(int year, int month)
625 {
627 {
629 }
630 return (IsLeapYear(year) ? DaysInMonth366 : DaysInMonth365)[month - 1];
631 }
632
633 internal static long DoubleDateToTicks(double value)
634 {
635 if (!(value < 2958466.0) || !(value > -657435.0))
636 {
638 }
639 long num = (long)(value * 86400000.0 + ((value >= 0.0) ? 0.5 : (-0.5)));
640 if (num < 0)
641 {
642 num -= num % 86400000 * 2;
643 }
644 num += 59926435200000L;
645 if (num < 0 || num >= 315537897600000L)
646 {
648 }
649 return num * 10000;
650 }
651
652 public override bool Equals([NotNullWhen(true)] object? value)
653 {
654 if (value is DateTime)
655 {
656 return Ticks == ((DateTime)value).Ticks;
657 }
658 return false;
659 }
660
661 public bool Equals(DateTime value)
662 {
663 return Ticks == value.Ticks;
664 }
665
666 public static bool Equals(DateTime t1, DateTime t2)
667 {
668 return t1.Ticks == t2.Ticks;
669 }
670
671 public static DateTime FromBinary(long dateData)
672 {
673 if ((dateData & long.MinValue) != 0L)
674 {
675 long num = dateData & 0x3FFFFFFFFFFFFFFFL;
676 if (num > 4611685154427387904L)
677 {
678 num -= 4611686018427387904L;
679 }
680 bool isAmbiguousLocalDst = false;
681 long ticks;
682 if (num < 0)
683 {
684 ticks = TimeZoneInfo.GetLocalUtcOffset(MinValue, TimeZoneInfoOptions.NoThrowOnInvalidTime).Ticks;
685 }
686 else if (num > 3155378975999999999L)
687 {
688 ticks = TimeZoneInfo.GetLocalUtcOffset(MaxValue, TimeZoneInfoOptions.NoThrowOnInvalidTime).Ticks;
689 }
690 else
691 {
692 DateTime time = new DateTime(num, DateTimeKind.Utc);
694 }
695 num += ticks;
696 if (num < 0)
697 {
698 num += 864000000000L;
699 }
700 if ((ulong)num > 3155378975999999999uL)
701 {
703 }
704 return new DateTime(num, DateTimeKind.Local, isAmbiguousLocalDst);
705 }
706 if ((ulong)(dateData & 0x3FFFFFFFFFFFFFFFL) > 3155378975999999999uL)
707 {
709 }
710 return new DateTime((ulong)dateData);
711 }
712
713 public static DateTime FromFileTime(long fileTime)
714 {
715 return FromFileTimeUtc(fileTime).ToLocalTime();
716 }
717
719 {
720 if ((ulong)fileTime > 2650467743999999999uL)
721 {
723 }
725 {
727 }
728 ulong num = (ulong)(fileTime + 504911232000000000L);
729 return new DateTime(num | 0x4000000000000000uL);
730 }
731
732 public static DateTime FromOADate(double d)
733 {
734 return new DateTime(DoubleDateToTicks(d), DateTimeKind.Unspecified);
735 }
736
738 {
739 if (info == null)
740 {
742 }
743 info.AddValue("ticks", Ticks);
744 info.AddValue("dateData", _dateData);
745 }
746
748 {
749 if (InternalKind == 4611686018427387904L)
750 {
751 return false;
752 }
753 return TimeZoneInfo.Local.IsDaylightSavingTime(this, TimeZoneInfoOptions.NoThrowOnInvalidTime);
754 }
755
757 {
758 if ((uint)kind > 2u)
759 {
761 }
762 return new DateTime(value.UTicks | (ulong)((long)kind << 62));
763 }
764
765 public long ToBinary()
766 {
767 if ((_dateData & 0x8000000000000000uL) != 0L)
768 {
770 long ticks = Ticks;
771 long num = ticks - localUtcOffset.Ticks;
772 if (num < 0)
773 {
774 num = 4611686018427387904L + num;
775 }
776 return num | long.MinValue;
777 }
778 return (long)_dateData;
779 }
780
781 private int GetDatePart(int part)
782 {
783 uint num = (uint)(UTicks / 864000000000L);
784 uint num2 = num / 146097;
785 num -= num2 * 146097;
786 uint num3 = num / 36524;
787 if (num3 == 4)
788 {
789 num3 = 3u;
790 }
791 num -= num3 * 36524;
792 uint num4 = num / 1461;
793 num -= num4 * 1461;
794 uint num5 = num / 365;
795 if (num5 == 4)
796 {
797 num5 = 3u;
798 }
799 if (part == 0)
800 {
801 return (int)(num2 * 400 + num3 * 100 + num4 * 4 + num5 + 1);
802 }
803 num -= num5 * 365;
804 if (part == 1)
805 {
806 return (int)(num + 1);
807 }
808 uint[] array = ((num5 == 3 && (num4 != 24 || num3 == 3)) ? s_daysToMonth366 : s_daysToMonth365);
809 uint num6;
810 for (num6 = (num >> 5) + 1; num >= array[num6]; num6++)
811 {
812 }
813 if (part == 2)
814 {
815 return (int)num6;
816 }
817 return (int)(num - array[num6 - 1] + 1);
818 }
819
820 internal void GetDate(out int year, out int month, out int day)
821 {
822 uint num = (uint)(UTicks / 864000000000L);
823 uint num2 = num / 146097;
824 num -= num2 * 146097;
825 uint num3 = num / 36524;
826 if (num3 == 4)
827 {
828 num3 = 3u;
829 }
830 num -= num3 * 36524;
831 uint num4 = num / 1461;
832 num -= num4 * 1461;
833 uint num5 = num / 365;
834 if (num5 == 4)
835 {
836 num5 = 3u;
837 }
838 year = (int)(num2 * 400 + num3 * 100 + num4 * 4 + num5 + 1);
839 num -= num5 * 365;
840 uint[] array = ((num5 == 3 && (num4 != 24 || num3 == 3)) ? s_daysToMonth366 : s_daysToMonth365);
841 uint num6;
842 for (num6 = (num >> 5) + 1; num >= array[num6]; num6++)
843 {
844 }
845 month = (int)num6;
846 day = (int)(num - array[num6 - 1] + 1);
847 }
848
849 [MethodImpl(MethodImplOptions.AggressiveInlining)]
850 internal void GetTime(out int hour, out int minute, out int second)
851 {
852 ulong num = UTicks / 10000000;
853 ulong num2 = num / 60;
854 second = (int)(num - num2 * 60);
855 ulong num3 = num2 / 60;
856 minute = (int)(num2 - num3 * 60);
857 hour = (int)((uint)num3 % 24);
858 }
859
860 [MethodImpl(MethodImplOptions.AggressiveInlining)]
861 internal void GetTime(out int hour, out int minute, out int second, out int millisecond)
862 {
863 ulong num = UTicks / 10000;
864 ulong num2 = num / 1000;
865 millisecond = (int)(num - num2 * 1000);
866 ulong num3 = num2 / 60;
867 second = (int)(num2 - num3 * 60);
868 ulong num4 = num3 / 60;
869 minute = (int)(num3 - num4 * 60);
870 hour = (int)((uint)num4 % 24);
871 }
872
873 [MethodImpl(MethodImplOptions.AggressiveInlining)]
874 internal void GetTimePrecise(out int hour, out int minute, out int second, out int tick)
875 {
876 ulong uTicks = UTicks;
877 ulong num = uTicks / 10000000;
878 tick = (int)(uTicks - num * 10000000);
879 ulong num2 = num / 60;
880 second = (int)(num - num2 * 60);
881 ulong num3 = num2 / 60;
882 minute = (int)(num2 - num3 * 60);
883 hour = (int)((uint)num3 % 24);
884 }
885
886 public override int GetHashCode()
887 {
888 long ticks = Ticks;
889 return (int)ticks ^ (int)(ticks >> 32);
890 }
891
893 {
894 return InternalKind == 13835058055282163712uL;
895 }
896
897 [MethodImpl(MethodImplOptions.AggressiveInlining)]
898 public static bool IsLeapYear(int year)
899 {
900 if (year < 1 || year > 9999)
901 {
903 }
904 if (((uint)year & 3u) != 0)
905 {
906 return false;
907 }
908 if ((year & 0xF) == 0)
909 {
910 return true;
911 }
912 if ((uint)year % 25u == 0)
913 {
914 return false;
915 }
916 return true;
917 }
918
919 public static DateTime Parse(string s)
920 {
921 if (s == null)
922 {
924 }
926 }
927
928 public static DateTime Parse(string s, IFormatProvider? provider)
929 {
930 if (s == null)
931 {
933 }
935 }
936
938 {
939 DateTimeFormatInfo.ValidateStyles(styles, styles: true);
940 if (s == null)
941 {
943 }
944 return DateTimeParse.Parse(s, DateTimeFormatInfo.GetInstance(provider), styles);
945 }
946
948 {
949 DateTimeFormatInfo.ValidateStyles(styles, styles: true);
950 return DateTimeParse.Parse(s, DateTimeFormatInfo.GetInstance(provider), styles);
951 }
952
953 public static DateTime ParseExact(string s, string format, IFormatProvider? provider)
954 {
955 if (s == null)
956 {
958 }
959 if (format == null)
960 {
962 }
964 }
965
966 public static DateTime ParseExact(string s, string format, IFormatProvider? provider, DateTimeStyles style)
967 {
968 DateTimeFormatInfo.ValidateStyles(style);
969 if (s == null)
970 {
972 }
973 if (format == null)
974 {
976 }
977 return DateTimeParse.ParseExact(s, format, DateTimeFormatInfo.GetInstance(provider), style);
978 }
979
985
986 public static DateTime ParseExact(string s, string[] formats, IFormatProvider? provider, DateTimeStyles style)
987 {
988 DateTimeFormatInfo.ValidateStyles(style);
989 if (s == null)
990 {
992 }
994 }
995
997 {
998 DateTimeFormatInfo.ValidateStyles(style);
1000 }
1001
1003 {
1004 return new TimeSpan(Ticks - value.Ticks);
1005 }
1006
1008 {
1009 ulong num = (ulong)(Ticks - value._ticks);
1010 if (num > 3155378975999999999L)
1011 {
1013 }
1014 return new DateTime(num | InternalKind);
1015 }
1016
1017 private static double TicksToOADate(long value)
1018 {
1019 if (value == 0L)
1020 {
1021 return 0.0;
1022 }
1023 if (value < 864000000000L)
1024 {
1025 value += 599264352000000000L;
1026 }
1027 if (value < 31241376000000000L)
1028 {
1030 }
1031 long num = (value - 599264352000000000L) / 10000;
1032 if (num < 0)
1033 {
1034 long num2 = num % 86400000;
1035 if (num2 != 0L)
1036 {
1037 num -= (86400000 + num2) * 2;
1038 }
1039 }
1040 return (double)num / 86400000.0;
1041 }
1042
1043 public double ToOADate()
1044 {
1045 return TicksToOADate(Ticks);
1046 }
1047
1048 public long ToFileTime()
1049 {
1050 return ToUniversalTime().ToFileTimeUtc();
1051 }
1052
1053 public long ToFileTimeUtc()
1054 {
1055 long num = (((_dateData & 0x8000000000000000uL) != 0L) ? ToUniversalTime().Ticks : Ticks);
1057 {
1058 return (long)ToFileTimeLeapSecondsAware(num);
1059 }
1060 num -= 504911232000000000L;
1061 if (num < 0)
1062 {
1064 }
1065 return num;
1066 }
1067
1069 {
1070 if ((_dateData & 0x8000000000000000uL) != 0L)
1071 {
1072 return this;
1073 }
1074 bool isDaylightSavings;
1077 long num = Ticks + ticks;
1078 if ((ulong)num <= 3155378975999999999uL)
1079 {
1081 {
1082 return new DateTime((ulong)num | 0x8000000000000000uL);
1083 }
1084 return new DateTime((ulong)num | 0xC000000000000000uL);
1085 }
1086 return new DateTime((num < 0) ? 9223372036854775808uL : 12378751012854775807uL);
1087 }
1088
1089 public string ToLongDateString()
1090 {
1091 return DateTimeFormat.Format(this, "D", null);
1092 }
1093
1094 public string ToLongTimeString()
1095 {
1096 return DateTimeFormat.Format(this, "T", null);
1097 }
1098
1099 public string ToShortDateString()
1100 {
1101 return DateTimeFormat.Format(this, "d", null);
1102 }
1103
1104 public string ToShortTimeString()
1105 {
1106 return DateTimeFormat.Format(this, "t", null);
1107 }
1108
1109 public override string ToString()
1110 {
1111 return DateTimeFormat.Format(this, null, null);
1112 }
1113
1114 public string ToString(string? format)
1115 {
1116 return DateTimeFormat.Format(this, format, null);
1117 }
1118
1120 {
1121 return DateTimeFormat.Format(this, null, provider);
1122 }
1123
1124 public string ToString(string? format, IFormatProvider? provider)
1125 {
1126 return DateTimeFormat.Format(this, format, provider);
1127 }
1128
1133
1135 {
1136 return TimeZoneInfo.ConvertTimeToUtc(this, TimeZoneInfoOptions.NoThrowOnInvalidTime);
1137 }
1138
1139 public static bool TryParse([NotNullWhen(true)] string? s, out DateTime result)
1140 {
1141 if (s == null)
1142 {
1143 result = default(DateTime);
1144 return false;
1145 }
1147 }
1148
1149 public static bool TryParse(ReadOnlySpan<char> s, out DateTime result)
1150 {
1152 }
1153
1154 public static bool TryParse([NotNullWhen(true)] string? s, IFormatProvider? provider, DateTimeStyles styles, out DateTime result)
1155 {
1156 DateTimeFormatInfo.ValidateStyles(styles, styles: true);
1157 if (s == null)
1158 {
1159 result = default(DateTime);
1160 return false;
1161 }
1162 return DateTimeParse.TryParse(s, DateTimeFormatInfo.GetInstance(provider), styles, out result);
1163 }
1164
1166 {
1167 DateTimeFormatInfo.ValidateStyles(styles, styles: true);
1168 return DateTimeParse.TryParse(s, DateTimeFormatInfo.GetInstance(provider), styles, out result);
1169 }
1170
1171 public static bool TryParseExact([NotNullWhen(true)] string? s, [NotNullWhen(true)] string? format, IFormatProvider? provider, DateTimeStyles style, out DateTime result)
1172 {
1173 DateTimeFormatInfo.ValidateStyles(style);
1174 if (s == null || format == null)
1175 {
1176 result = default(DateTime);
1177 return false;
1178 }
1179 return DateTimeParse.TryParseExact(s, format, DateTimeFormatInfo.GetInstance(provider), style, out result);
1180 }
1181
1183 {
1184 DateTimeFormatInfo.ValidateStyles(style);
1185 return DateTimeParse.TryParseExact(s, format, DateTimeFormatInfo.GetInstance(provider), style, out result);
1186 }
1187
1188 public static bool TryParseExact([NotNullWhen(true)] string? s, [NotNullWhen(true)] string?[]? formats, IFormatProvider? provider, DateTimeStyles style, out DateTime result)
1189 {
1190 DateTimeFormatInfo.ValidateStyles(style);
1191 if (s == null)
1192 {
1193 result = default(DateTime);
1194 return false;
1195 }
1196 return DateTimeParse.TryParseExactMultiple(s, formats, DateTimeFormatInfo.GetInstance(provider), style, out result);
1197 }
1198
1200 {
1201 DateTimeFormatInfo.ValidateStyles(style);
1202 return DateTimeParse.TryParseExactMultiple(s, formats, DateTimeFormatInfo.GetInstance(provider), style, out result);
1203 }
1204
1206 {
1207 ulong num = (ulong)(d.Ticks + t._ticks);
1208 if (num > 3155378975999999999L)
1209 {
1211 }
1212 return new DateTime(num | d.InternalKind);
1213 }
1214
1216 {
1217 ulong num = (ulong)(d.Ticks - t._ticks);
1218 if (num > 3155378975999999999L)
1219 {
1221 }
1222 return new DateTime(num | d.InternalKind);
1223 }
1224
1226 {
1227 return new TimeSpan(d1.Ticks - d2.Ticks);
1228 }
1229
1230 public static bool operator ==(DateTime d1, DateTime d2)
1231 {
1232 return d1.Ticks == d2.Ticks;
1233 }
1234
1235 public static bool operator !=(DateTime d1, DateTime d2)
1236 {
1237 return d1.Ticks != d2.Ticks;
1238 }
1239
1240 public static bool operator <(DateTime t1, DateTime t2)
1241 {
1242 return t1.Ticks < t2.Ticks;
1243 }
1244
1245 public static bool operator <=(DateTime t1, DateTime t2)
1246 {
1247 return t1.Ticks <= t2.Ticks;
1248 }
1249
1250 public static bool operator >(DateTime t1, DateTime t2)
1251 {
1252 return t1.Ticks > t2.Ticks;
1253 }
1254
1255 public static bool operator >=(DateTime t1, DateTime t2)
1256 {
1257 return t1.Ticks >= t2.Ticks;
1258 }
1259
1260 public string[] GetDateTimeFormats()
1261 {
1263 }
1264
1266 {
1267 return DateTimeFormat.GetAllDateTimes(this, DateTimeFormatInfo.GetInstance(provider));
1268 }
1269
1270 public string[] GetDateTimeFormats(char format)
1271 {
1273 }
1274
1276 {
1278 }
1279
1281 {
1282 return TypeCode.DateTime;
1283 }
1284
1286 {
1287 throw InvalidCast("Boolean");
1288 }
1289
1291 {
1292 throw InvalidCast("Char");
1293 }
1294
1296 {
1297 throw InvalidCast("SByte");
1298 }
1299
1301 {
1302 throw InvalidCast("Byte");
1303 }
1304
1306 {
1307 throw InvalidCast("Int16");
1308 }
1309
1311 {
1312 throw InvalidCast("UInt16");
1313 }
1314
1316 {
1317 throw InvalidCast("Int32");
1318 }
1319
1321 {
1322 throw InvalidCast("UInt32");
1323 }
1324
1326 {
1327 throw InvalidCast("Int64");
1328 }
1329
1331 {
1332 throw InvalidCast("UInt64");
1333 }
1334
1336 {
1337 throw InvalidCast("Single");
1338 }
1339
1341 {
1342 throw InvalidCast("Double");
1343 }
1344
1346 {
1347 throw InvalidCast("Decimal");
1348 }
1349
1350 private static Exception InvalidCast(string to)
1351 {
1352 return new InvalidCastException(SR.Format(SR.InvalidCast_FromTo, "DateTime", to));
1353 }
1354
1356 {
1357 return this;
1358 }
1359
1364
1365 internal static bool TryCreate(int year, int month, int day, int hour, int minute, int second, int millisecond, out DateTime result)
1366 {
1367 result = default(DateTime);
1368 if (year < 1 || year > 9999 || month < 1 || month > 12 || day < 1)
1369 {
1370 return false;
1371 }
1372 if ((uint)hour >= 24u || (uint)minute >= 60u || (uint)millisecond >= 1000u)
1373 {
1374 return false;
1375 }
1377 if ((uint)day > array[month] - array[month - 1])
1378 {
1379 return false;
1380 }
1381 ulong num = (ulong)(uint)((int)(DaysToYear((uint)year) + array[month - 1]) + day - 1) * 864000000000uL;
1382 if ((uint)second < 60u)
1383 {
1384 num += TimeToTicks(hour, minute, second) + (uint)(millisecond * 10000);
1385 }
1386 else
1387 {
1388 if (second != 60 || !s_systemSupportsLeapSeconds || !IsValidTimeWithLeapSeconds(year, month, day, hour, minute, DateTimeKind.Unspecified))
1389 {
1390 return false;
1391 }
1392 num += TimeToTicks(hour, minute, 59) + 9990000;
1393 }
1394 result = new DateTime(num);
1395 return true;
1396 }
1397
1398 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1400 {
1401 return left + right;
1402 }
1403
1404 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1406 {
1407 return left < right;
1408 }
1409
1410 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1412 {
1413 return left <= right;
1414 }
1415
1416 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1418 {
1419 return left > right;
1420 }
1421
1422 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1424 {
1425 return left >= right;
1426 }
1427
1428 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1429 static bool IEqualityOperators<DateTime, DateTime>.operator ==(DateTime left, DateTime right)
1430 {
1431 return left == right;
1432 }
1433
1434 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1435 static bool IEqualityOperators<DateTime, DateTime>.operator !=(DateTime left, DateTime right)
1436 {
1437 return left != right;
1438 }
1439
1440 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1442 {
1443 return Parse(s, provider);
1444 }
1445
1446 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1448 {
1449 return TryParse(s, provider, DateTimeStyles.None, out result);
1450 }
1451
1452 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1457
1458 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1463
1464 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1466 {
1467 return left - right;
1468 }
1469
1470 [RequiresPreviewFeatures("Generic Math is in preview.", Url = "https://aka.ms/dotnet-warnings/generic-math-preview")]
1472 {
1473 return left - right;
1474 }
1475
1485
1486 [MethodImpl(MethodImplOptions.NoInlining)]
1487 internal unsafe static bool IsValidTimeWithLeapSeconds(int year, int month, int day, int hour, int minute, DateTimeKind kind)
1488 {
1490 sYSTEMTIME.Year = (ushort)year;
1491 sYSTEMTIME.Month = (ushort)month;
1493 sYSTEMTIME.Day = (ushort)day;
1494 sYSTEMTIME.Hour = (ushort)hour;
1495 sYSTEMTIME.Minute = (ushort)minute;
1496 sYSTEMTIME.Second = 60;
1500 {
1501 return true;
1502 }
1503 System.Runtime.CompilerServices.Unsafe.SkipInit(out ulong num);
1504 if (kind != DateTimeKind.Local && Interop.Kernel32.SystemTimeToFileTime(&sYSTEMTIME, &num) != 0)
1505 {
1506 return true;
1507 }
1508 return false;
1509 }
1510
1512 {
1515 {
1517 }
1518 return CreateDateTimeFromSystemTime(in time, fileTime % 10000);
1519 }
1520
1521 private unsafe static ulong ToFileTimeLeapSecondsAware(long ticks)
1522 {
1523 DateTime dateTime = new DateTime(ticks);
1524 dateTime.GetDate(out var year, out var month, out var day);
1526 sYSTEMTIME.Year = (ushort)year;
1527 sYSTEMTIME.Month = (ushort)month;
1529 sYSTEMTIME.Day = (ushort)day;
1530 dateTime.GetTimePrecise(out var hour, out var minute, out var second, out var tick);
1531 sYSTEMTIME.Hour = (ushort)hour;
1532 sYSTEMTIME.Minute = (ushort)minute;
1533 sYSTEMTIME.Second = (ushort)second;
1535 System.Runtime.CompilerServices.Unsafe.SkipInit(out ulong num);
1537 {
1539 }
1540 return num + (uint)tick;
1541 }
1542
1544 {
1545 uint year = time.Year;
1547 int num = time.Month - 1;
1548 uint num2 = DaysToYear(year) + array[num] + time.Day - 1;
1549 ulong num3 = (ulong)num2 * 864000000000uL;
1550 num3 += (ulong)(time.Hour * 36000000000L);
1551 num3 += (ulong)((long)time.Minute * 600000000L);
1552 uint second = time.Second;
1553 if (second <= 59)
1554 {
1555 ulong num4 = (uint)((int)(second * 10000000) + time.Milliseconds * 10000) + hundredNanoSecond;
1556 return new DateTime((num3 + num4) | 0x4000000000000000uL);
1557 }
1558 num3 += 4611686019027387903L;
1559 return new DateTime(num3);
1560 }
1561
1563 {
1564 IntPtr handle = Interop.Kernel32.LoadLibraryEx("kernel32.dll", IntPtr.Zero, 2048);
1565 IntPtr intPtr = NativeLibrary.GetExport(handle, "GetSystemTimeAsFileTime");
1566 if (NativeLibrary.TryGetExport(handle, "GetSystemTimePreciseAsFileTime", out var address))
1567 {
1568 System.Runtime.CompilerServices.Unsafe.SkipInit(out long num);
1570 for (int i = 0; i < 10; i++)
1571 {
1572 ((delegate* unmanaged[SuppressGCTransition]<long*, void>)(void*)intPtr)(&num);
1573 ((delegate* unmanaged[SuppressGCTransition]<long*, void>)(void*)address)(&num2);
1574 if (Math.Abs(num2 - num) <= 1000000)
1575 {
1576 intPtr = address;
1577 break;
1578 }
1579 }
1580 }
1581 return (delegate* unmanaged[SuppressGCTransition]<ulong*, void>)(void*)intPtr;
1582 }
1583
1585 {
1586 System.Runtime.CompilerServices.Unsafe.SkipInit(out ulong num);
1588 ulong hundredNanoSecond = num % 10000;
1590 if (Interop.Kernel32.FileTimeToSystemTime(&num, &time) == Interop.BOOL.FALSE)
1591 {
1593 }
1594 if (time.Second >= 60)
1595 {
1597 }
1598 ulong num2 = num + 3000000000u;
1601 {
1603 }
1604 ulong num3;
1605 ulong num4;
1606 if (sYSTEMTIME.Second == time.Second)
1607 {
1608 num3 = num;
1610 }
1611 else
1612 {
1614 time2.Hour = 0;
1615 time2.Minute = 0;
1616 time2.Second = 0;
1618 System.Runtime.CompilerServices.Unsafe.SkipInit(out ulong num5);
1620 {
1622 }
1623 num3 = num5 + 863990000000L - 3000000000u;
1624 if (num - num3 >= 3000000000u)
1625 {
1627 }
1628 num4 = CreateDateTimeFromSystemTime(in time2, 0uL)._dateData + 863990000000L - 3000000000u;
1629 }
1631 {
1632 OSFileTimeTicksAtStartOfValidityWindow = num3,
1633 DotnetDateDataAtStartOfValidityWindow = num4
1634 });
1635 return new DateTime(num4 + num - num3);
1636 [MethodImpl(MethodImplOptions.NoInlining)]
1638 {
1642 }
1643 }
1644}
static unsafe BOOL TzSpecificLocalTimeToSystemTime(IntPtr lpTimeZoneInformation, SYSTEMTIME *lpLocalTime, SYSTEMTIME *lpUniversalTime)
static unsafe BOOL FileTimeToSystemTime(ulong *lpFileTime, SYSTEMTIME *lpSystemTime)
static IntPtr LoadLibraryEx(string libFilename, IntPtr reserved, int flags)
static unsafe void GetSystemTime(SYSTEMTIME *lpSystemTime)
static unsafe BOOL SystemTimeToFileTime(SYSTEMTIME *lpSystemTime, ulong *lpFileTime)
static unsafe uint NtQuerySystemInformation(int SystemInformationClass, void *SystemInformation, uint SystemInformationLength, uint *ReturnLength)
static long ToInt64(object? value)
Definition Convert.cs:1623
static ulong ToUInt64(object? value)
Definition Convert.cs:1738
static object DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
Definition Convert.cs:269
static string[] GetAllDateTimes(DateTime dateTime, char format, DateTimeFormatInfo dtfi)
static bool TryFormat(DateTime dateTime, Span< char > destination, out int charsWritten, ReadOnlySpan< char > format, IFormatProvider provider)
static string Format(DateTime dateTime, string format, IFormatProvider provider)
static bool TryParseExactMultiple(ReadOnlySpan< char > s, string[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style, out DateTime result, out TimeSpan offset)
static DateTime ParseExact(ReadOnlySpan< char > s, ReadOnlySpan< char > format, DateTimeFormatInfo dtfi, DateTimeStyles style)
static bool TryParse(ReadOnlySpan< char > s, DateTimeFormatInfo dtfi, DateTimeStyles styles, out DateTime result)
static DateTime Parse(ReadOnlySpan< char > s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
static DateTime ParseExactMultiple(ReadOnlySpan< char > s, string[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style)
static bool TryParseExact(ReadOnlySpan< char > s, ReadOnlySpan< char > format, DateTimeFormatInfo dtfi, DateTimeStyles style, out DateTime result)
virtual DateTime ToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond)
Definition Calendar.cs:304
static CultureInfo CurrentCulture
static CultureInfo InvariantCulture
static double Abs(double value)
static IntPtr GetExport(IntPtr handle, string name)
static bool TryGetExport(IntPtr handle, string name, out IntPtr address)
static string ArgumentOutOfRange_Range
Definition SR.cs:1096
static string Arg_MustBeDateTime
Definition SR.cs:262
static string ArgumentOutOfRange_DateTimeBadMonths
Definition SR.cs:990
static string InvalidCast_FromTo
Definition SR.cs:1392
static string ArgumentOutOfRange_AddValue
Definition SR.cs:968
static string Argument_InvalidDateTimeKind
Definition SR.cs:664
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string ArgumentOutOfRange_DateTimeBadYears
Definition SR.cs:996
static string Serialization_DateTimeTicksOutOfRange
Definition SR.cs:1874
static string Arg_OleAutDateScale
Definition SR.cs:360
static string ArgumentOutOfRange_DateArithmetic
Definition SR.cs:988
static string Argument_DateTimeBadBinaryData
Definition SR.cs:556
static string ArgumentOutOfRange_FileTimeInvalid
Definition SR.cs:1016
static string Serialization_MissingDateTimeData
Definition SR.cs:1890
static string ArgumentOutOfRange_DateTimeBadTicks
Definition SR.cs:992
static string Arg_OleAutDateInvalid
Definition SR.cs:358
Definition SR.cs:7
static void Write(ref bool location, bool value)
Definition Volatile.cs:74
static void ThrowArgumentOutOfRange_Month(int month)
static void ThrowArgumentOutOfRange_Year()
static void ThrowArgumentNullException(string name)
static void ThrowArgumentOutOfRange_BadYearMonthDay()
static void ThrowArgumentOutOfRange_BadHourMinuteSecond()
static TimeZoneInfo Local
static TimeSpan GetUtcOffsetFromUtc(DateTime time, TimeZoneInfo zone)
static TimeSpan GetLocalUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags)
static DateTime ConvertTimeToUtc(DateTime dateTime)
static TimeSpan GetDateTimeNowUtcOffsetFromUtc(DateTime time, out bool isAmbiguousLocalDst)
static TResult AdditiveIdentity
short ToInt16(IFormatProvider? provider)
char ToChar(IFormatProvider? provider)
byte ToByte(IFormatProvider? provider)
decimal ToDecimal(IFormatProvider? provider)
object ToType(Type conversionType, IFormatProvider? provider)
uint ToUInt32(IFormatProvider? provider)
DateTime ToDateTime(IFormatProvider? provider)
int ToInt32(IFormatProvider? provider)
long ToInt64(IFormatProvider? provider)
ushort ToUInt16(IFormatProvider? provider)
double ToDouble(IFormatProvider? provider)
float ToSingle(IFormatProvider? provider)
sbyte ToSByte(IFormatProvider? provider)
ulong ToUInt64(IFormatProvider? provider)
bool ToBoolean(IFormatProvider? provider)
static TSelf MinValue
static TSelf MaxValue
static bool TryParse([NotNullWhen(true)] string? s, IFormatProvider? provider, out TSelf result)
static TSelf Parse(string s, IFormatProvider? provider)
static bool TryParse(ReadOnlySpan< char > s, IFormatProvider? provider, out TSelf result)
static TSelf Parse(ReadOnlySpan< char > s, IFormatProvider? provider)
void GetObjectData(SerializationInfo info, StreamingContext context)
TypeCode
Definition TypeCode.cs:4
DayOfWeek
Definition DayOfWeek.cs:4
override int GetHashCode()
Definition DateTime.cs:886
static DateTime ParseExact(string s, string format, IFormatProvider? provider, DateTimeStyles style)
Definition DateTime.cs:966
DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar, DateTimeKind kind)
Definition DateTime.cs:339
TimeSpan Subtract(DateTime value)
Definition DateTime.cs:1002
static unsafe bool IsValidTimeWithLeapSeconds(int year, int month, int day, int hour, int minute, DateTimeKind kind)
Definition DateTime.cs:1487
static ulong TimeToTicks(int hour, int minute, int second, int millisecond)
Definition DateTime.cs:614
static double TicksToOADate(long value)
Definition DateTime.cs:1017
DateTime(int year, int month, int day, Calendar calendar)
Definition DateTime.cs:233
long ToBinary()
Definition DateTime.cs:765
static bool Equals(DateTime t1, DateTime t2)
Definition DateTime.cs:666
void GetTimePrecise(out int hour, out int minute, out int second, out int tick)
Definition DateTime.cs:874
string[] GetDateTimeFormats()
Definition DateTime.cs:1260
static bool operator==(DateTime d1, DateTime d2)
Definition DateTime.cs:1230
DateTime Subtract(TimeSpan value)
Definition DateTime.cs:1007
long ToFileTime()
Definition DateTime.cs:1048
static DateTime ParseExact(string s, string[] formats, IFormatProvider? provider, DateTimeStyles style)
Definition DateTime.cs:986
static DateTime UnsafeCreate(long ticks)
Definition DateTime.cs:176
static DateTime FromOADate(double d)
Definition DateTime.cs:732
static void ThrowDateArithmetic(int param)
Definition DateTime.cs:218
static ulong TimeToTicks(int hour, int minute, int second)
Definition DateTime.cs:604
DateTime(int year, int month, int day, int hour, int minute, int second)
Definition DateTime.cs:238
static readonly DateTime UnixEpoch
Definition DateTime.cs:39
static DateTime IMinMaxValue< DateTime >. MaxValue
Definition DateTime.cs:139
static DateTime FromFileTime(long fileTime)
Definition DateTime.cs:713
DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond)
Definition DateTime.cs:282
static readonly DateTime MaxValue
Definition DateTime.cs:37
static readonly DateTime MinValue
Definition DateTime.cs:35
static DateTime Parse(string s, IFormatProvider? provider, DateTimeStyles styles)
Definition DateTime.cs:937
DateTime(long ticks)
Definition DateTime.cs:162
string[] GetDateTimeFormats(IFormatProvider? provider)
Definition DateTime.cs:1265
static unsafe readonly delegate *unmanaged[SuppressGCTransition]< ulong *, void > s_pfnGetSystemTimeAsFileTime
Definition DateTime.cs:45
static bool TryParse(ReadOnlySpan< char > s, out DateTime result)
Definition DateTime.cs:1149
DateTime(ulong dateData)
Definition DateTime.cs:171
DateTime ToUniversalTime()
Definition DateTime.cs:1134
static DateTime CreateDateTimeFromSystemTime(in Interop.Kernel32.SYSTEMTIME time, ulong hundredNanoSecond)
Definition DateTime.cs:1543
TimeSpan TimeOfDay
Definition DateTime.cs:126
void ValidateLeapSecond()
Definition DateTime.cs:365
static int Compare(DateTime t1, DateTime t2)
Definition DateTime.cs:546
static DateTime Today
Definition DateTime.cs:128
static void ThrowTicksOutOfRange()
Definition DateTime.cs:203
string ToString(IFormatProvider? provider)
Definition DateTime.cs:1119
static Exception InvalidCast(string to)
Definition DateTime.cs:1350
static DateTime Now
Definition DateTime.cs:103
DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind)
Definition DateTime.cs:301
static void ThrowMillisecondOutOfRange()
Definition DateTime.cs:213
static bool operator<(DateTime t1, DateTime t2)
Definition DateTime.cs:1240
static DateTime operator+(DateTime d, TimeSpan t)
Definition DateTime.cs:1205
DateTime(int year, int month, int day)
Definition DateTime.cs:228
DateTime ToLocalTime()
Definition DateTime.cs:1068
DateTime AddSeconds(double value)
Definition DateTime.cs:488
static unsafe DateTime UtcNow
Definition DateTime.cs:142
bool TryAddTicks(long value, out DateTime result)
Definition DateTime.cs:503
static DateTime ParseExact(string s, string format, IFormatProvider? provider)
Definition DateTime.cs:953
static unsafe DateTime UpdateLeapSecondCacheAndReturnUtcNow()
Definition DateTime.cs:1584
DateTime Date
Definition DateTime.cs:66
DateTime(int year, int month, int day, int hour, int minute, int second, DateTimeKind kind)
Definition DateTime.cs:249
static LeapSecondCache s_leapSecondCache
Definition DateTime.cs:47
string[] GetDateTimeFormats(char format, IFormatProvider? provider)
Definition DateTime.cs:1275
static unsafe ulong ToFileTimeLeapSecondsAware(long ticks)
Definition DateTime.cs:1521
static DateTime Parse(string s, IFormatProvider? provider)
Definition DateTime.cs:928
int CompareTo(DateTime value)
Definition DateTime.cs:574
double ToOADate()
Definition DateTime.cs:1043
static ReadOnlySpan< byte > DaysInMonth365
Definition DateTime.cs:49
DateTime AddMinutes(double value)
Definition DateTime.cs:447
bool TryFormat(Span< char > destination, out int charsWritten, ReadOnlySpan< char > format=default(ReadOnlySpan< char >), IFormatProvider? provider=null)
Definition DateTime.cs:1129
static DateTime IMinMaxValue< DateTime >. MinValue
Definition DateTime.cs:136
string[] GetDateTimeFormats(char format)
Definition DateTime.cs:1270
DateTime(long ticks, DateTimeKind kind, bool isAmbiguousDst)
Definition DateTime.cs:194
static DateTime Parse(ReadOnlySpan< char > s, IFormatProvider? provider=null, DateTimeStyles styles=DateTimeStyles.None)
Definition DateTime.cs:947
DateTime(int year, int month, int day, int hour, int minute, int second, Calendar calendar)
Definition DateTime.cs:267
long ToFileTimeUtc()
Definition DateTime.cs:1053
readonly ulong _dateData
Definition DateTime.cs:41
DateTime AddHours(double value)
Definition DateTime.cs:437
static ulong DateToTicks(int year, int month, int day)
Definition DateTime.cs:580
static bool TryParseExact(ReadOnlySpan< char > s, ReadOnlySpan< char > format, IFormatProvider? provider, DateTimeStyles style, out DateTime result)
Definition DateTime.cs:1182
DateTime AddYears(int value)
Definition DateTime.cs:515
DayOfWeek DayOfWeek
Definition DateTime.cs:76
static DateTime SpecifyKind(DateTime value, DateTimeKind kind)
Definition DateTime.cs:756
static long DoubleDateToTicks(double value)
Definition DateTime.cs:633
static bool TryCreate(int year, int month, int day, int hour, int minute, int second, int millisecond, out DateTime result)
Definition DateTime.cs:1365
DateTime AddMonths(int months)
Definition DateTime.cs:452
string ToLongTimeString()
Definition DateTime.cs:1094
static bool operator<=(DateTime t1, DateTime t2)
Definition DateTime.cs:1245
static bool TryParseExact([NotNullWhen(true)] string? s, [NotNullWhen(true)] string? format, IFormatProvider? provider, DateTimeStyles style, out DateTime result)
Definition DateTime.cs:1171
static bool TryParse([NotNullWhen(true)] string? s, out DateTime result)
Definition DateTime.cs:1139
DateTimeKind Kind
Definition DateTime.cs:83
DateTime AddMilliseconds(double value)
Definition DateTime.cs:442
static int DaysInMonth(int year, int month)
Definition DateTime.cs:624
DateTime Add(double value, int scale)
Definition DateTime.cs:418
override string ToString()
Definition DateTime.cs:1109
static DateTime FromFileTimeUtc(long fileTime)
Definition DateTime.cs:718
static bool TryParse([NotNullWhen(true)] string? s, IFormatProvider? provider, DateTimeStyles styles, out DateTime result)
Definition DateTime.cs:1154
static DateTime FromBinary(long dateData)
Definition DateTime.cs:671
static readonly uint[] s_daysToMonth366
Definition DateTime.cs:29
static bool IsLeapYear(int year)
Definition DateTime.cs:898
static ReadOnlySpan< byte > DaysInMonth366
Definition DateTime.cs:55
override bool Equals([NotNullWhen(true)] object? value)
Definition DateTime.cs:652
DateTime AddTicks(long value)
Definition DateTime.cs:493
string ToString(string? format, IFormatProvider? provider)
Definition DateTime.cs:1124
bool IsDaylightSavingTime()
Definition DateTime.cs:747
static bool operator>=(DateTime t1, DateTime t2)
Definition DateTime.cs:1255
DateTime(long ticks, DateTimeKind kind)
Definition DateTime.cs:181
static uint DaysToYear(uint year)
Definition DateTime.cs:596
static DateTime ParseExact(ReadOnlySpan< char > s, ReadOnlySpan< char > format, IFormatProvider? provider, DateTimeStyles style=DateTimeStyles.None)
Definition DateTime.cs:980
static bool TryParseExact(ReadOnlySpan< char > s, [NotNullWhen(true)] string?[]? formats, IFormatProvider? provider, DateTimeStyles style, out DateTime result)
Definition DateTime.cs:1199
static readonly uint[] s_daysToMonth365
Definition DateTime.cs:23
string ToShortTimeString()
Definition DateTime.cs:1104
static bool TryParse(ReadOnlySpan< char > s, IFormatProvider? provider, DateTimeStyles styles, out DateTime result)
Definition DateTime.cs:1165
bool IsAmbiguousDaylightSavingTime()
Definition DateTime.cs:892
void GetDate(out int year, out int month, out int day)
Definition DateTime.cs:820
void GetTime(out int hour, out int minute, out int second)
Definition DateTime.cs:850
int CompareTo(object? value)
Definition DateTime.cs:561
TypeCode GetTypeCode()
Definition DateTime.cs:1280
static DateTime Parse(string s)
Definition DateTime.cs:919
DateTime(SerializationInfo info, StreamingContext context)
Definition DateTime.cs:373
ulong InternalKind
Definition DateTime.cs:63
string ToLongDateString()
Definition DateTime.cs:1089
string ToString(string? format)
Definition DateTime.cs:1114
static DateTime operator-(DateTime d, TimeSpan t)
Definition DateTime.cs:1215
DateTime AddDays(double value)
Definition DateTime.cs:432
void GetTime(out int hour, out int minute, out int second, out int millisecond)
Definition DateTime.cs:861
static unsafe bool SystemSupportsLeapSeconds()
Definition DateTime.cs:1476
static bool operator!=(DateTime d1, DateTime d2)
Definition DateTime.cs:1235
static DateTime ParseExact(ReadOnlySpan< char > s, string[] formats, IFormatProvider? provider, DateTimeStyles style=DateTimeStyles.None)
Definition DateTime.cs:996
static bool TryParseExact([NotNullWhen(true)] string? s, [NotNullWhen(true)] string?[]? formats, IFormatProvider? provider, DateTimeStyles style, out DateTime result)
Definition DateTime.cs:1188
static void ThrowInvalidKind()
Definition DateTime.cs:208
int GetDatePart(int part)
Definition DateTime.cs:781
bool Equals(DateTime value)
Definition DateTime.cs:661
static unsafe delegate *unmanaged[SuppressGCTransition]< ulong *, void > GetGetSystemTimeAsFileTimeFnPtr()
Definition DateTime.cs:1562
static readonly bool s_systemSupportsLeapSeconds
Definition DateTime.cs:43
static unsafe DateTime FromFileTimeLeapSecondsAware(ulong fileTime)
Definition DateTime.cs:1511
static bool operator>(DateTime t1, DateTime t2)
Definition DateTime.cs:1250
DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar)
Definition DateTime.cs:324
string ToShortDateString()
Definition DateTime.cs:1099
DateTime Add(TimeSpan value)
Definition DateTime.cs:413
static readonly IntPtr Zero
Definition IntPtr.cs:18
readonly long _ticks
Definition TimeSpan.cs:27