From 52d9df51520d729b90601857008996d0905b7a69 Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Wed, 29 Mar 2017 16:01:23 -0700 Subject: [PATCH] Delete moved files Commit migrated from https://github.com/dotnet/coreclr/commit/f990ce64c49d268bcaef5a87d5838f5008ff0a30 --- .../src/mscorlib/System.Private.CoreLib.csproj | 3 - .../src/mscorlib/src/System/DateTimeOffset.cs | 954 --------------------- .../src/mscorlib/src/System/StringComparer.cs | 301 ------- .../src/mscorlib/src/System/StringComparison.cs | 29 - 4 files changed, 1287 deletions(-) delete mode 100644 src/coreclr/src/mscorlib/src/System/DateTimeOffset.cs delete mode 100644 src/coreclr/src/mscorlib/src/System/StringComparer.cs delete mode 100644 src/coreclr/src/mscorlib/src/System/StringComparison.cs diff --git a/src/coreclr/src/mscorlib/System.Private.CoreLib.csproj b/src/coreclr/src/mscorlib/System.Private.CoreLib.csproj index 1640c16..6f18a4f 100644 --- a/src/coreclr/src/mscorlib/System.Private.CoreLib.csproj +++ b/src/coreclr/src/mscorlib/System.Private.CoreLib.csproj @@ -322,13 +322,10 @@ - - - diff --git a/src/coreclr/src/mscorlib/src/System/DateTimeOffset.cs b/src/coreclr/src/mscorlib/src/System/DateTimeOffset.cs deleted file mode 100644 index 35253ba..0000000 --- a/src/coreclr/src/mscorlib/src/System/DateTimeOffset.cs +++ /dev/null @@ -1,954 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - - -using System; -using System.Threading; -using System.Globalization; -using System.Runtime.InteropServices; -using System.Runtime.CompilerServices; -using System.Runtime.Serialization; -using System.Diagnostics; -using System.Diagnostics.Contracts; - -namespace System -{ - // DateTimeOffset is a value type that consists of a DateTime and a time zone offset, - // ie. how far away the time is from GMT. The DateTime is stored whole, and the offset - // is stored as an Int16 internally to save space, but presented as a TimeSpan. - // - // The range is constrained so that both the represented clock time and the represented - // UTC time fit within the boundaries of MaxValue. This gives it the same range as DateTime - // for actual UTC times, and a slightly constrained range on one end when an offset is - // present. - // - // This class should be substitutable for date time in most cases; so most operations - // effectively work on the clock time. However, the underlying UTC time is what counts - // for the purposes of identity, sorting and subtracting two instances. - // - // - // There are theoretically two date times stored, the UTC and the relative local representation - // or the 'clock' time. It actually does not matter which is stored in m_dateTime, so it is desirable - // for most methods to go through the helpers UtcDateTime and ClockDateTime both to abstract this - // out and for internal readability. - - [StructLayout(LayoutKind.Auto)] - [Serializable] - public struct DateTimeOffset : IComparable, IFormattable, - IComparable, IEquatable, ISerializable, IDeserializationCallback - { - // Constants - internal const Int64 MaxOffset = TimeSpan.TicksPerHour * 14; - internal const Int64 MinOffset = -MaxOffset; - - private const long UnixEpochTicks = TimeSpan.TicksPerDay * DateTime.DaysTo1970; // 621,355,968,000,000,000 - private const long UnixEpochSeconds = UnixEpochTicks / TimeSpan.TicksPerSecond; // 62,135,596,800 - private const long UnixEpochMilliseconds = UnixEpochTicks / TimeSpan.TicksPerMillisecond; // 62,135,596,800,000 - - internal const long UnixMinSeconds = DateTime.MinTicks / TimeSpan.TicksPerSecond - UnixEpochSeconds; - internal const long UnixMaxSeconds = DateTime.MaxTicks / TimeSpan.TicksPerSecond - UnixEpochSeconds; - - // Static Fields - public static readonly DateTimeOffset MinValue = new DateTimeOffset(DateTime.MinTicks, TimeSpan.Zero); - public static readonly DateTimeOffset MaxValue = new DateTimeOffset(DateTime.MaxTicks, TimeSpan.Zero); - - // Instance Fields - private DateTime m_dateTime; - private Int16 m_offsetMinutes; - - // Constructors - - // Constructs a DateTimeOffset from a tick count and offset - public DateTimeOffset(long ticks, TimeSpan offset) - { - m_offsetMinutes = ValidateOffset(offset); - // Let the DateTime constructor do the range checks - DateTime dateTime = new DateTime(ticks); - m_dateTime = ValidateDate(dateTime, offset); - } - - // Constructs a DateTimeOffset from a DateTime. For Local and Unspecified kinds, - // extracts the local offset. For UTC, creates a UTC instance with a zero offset. - public DateTimeOffset(DateTime dateTime) - { - TimeSpan offset; - if (dateTime.Kind != DateTimeKind.Utc) - { - // Local and Unspecified are both treated as Local - offset = TimeZoneInfo.GetLocalUtcOffset(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime); - } - else - { - offset = new TimeSpan(0); - } - m_offsetMinutes = ValidateOffset(offset); - m_dateTime = ValidateDate(dateTime, offset); - } - - // Constructs a DateTimeOffset from a DateTime. And an offset. Always makes the clock time - // consistent with the DateTime. For Utc ensures the offset is zero. For local, ensures that - // the offset corresponds to the local. - public DateTimeOffset(DateTime dateTime, TimeSpan offset) - { - if (dateTime.Kind == DateTimeKind.Local) - { - if (offset != TimeZoneInfo.GetLocalUtcOffset(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime)) - { - throw new ArgumentException(SR.Argument_OffsetLocalMismatch, nameof(offset)); - } - } - else if (dateTime.Kind == DateTimeKind.Utc) - { - if (offset != TimeSpan.Zero) - { - throw new ArgumentException(SR.Argument_OffsetUtcMismatch, nameof(offset)); - } - } - m_offsetMinutes = ValidateOffset(offset); - m_dateTime = ValidateDate(dateTime, offset); - } - - // Constructs a DateTimeOffset from a given year, month, day, hour, - // minute, second and offset. - public DateTimeOffset(int year, int month, int day, int hour, int minute, int second, TimeSpan offset) - { - m_offsetMinutes = ValidateOffset(offset); - m_dateTime = ValidateDate(new DateTime(year, month, day, hour, minute, second), offset); - } - - // Constructs a DateTimeOffset from a given year, month, day, hour, - // minute, second, millsecond and offset - public DateTimeOffset(int year, int month, int day, int hour, int minute, int second, int millisecond, TimeSpan offset) - { - m_offsetMinutes = ValidateOffset(offset); - m_dateTime = ValidateDate(new DateTime(year, month, day, hour, minute, second, millisecond), offset); - } - - - // Constructs a DateTimeOffset from a given year, month, day, hour, - // minute, second, millsecond, Calendar and offset. - public DateTimeOffset(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar, TimeSpan offset) - { - m_offsetMinutes = ValidateOffset(offset); - m_dateTime = ValidateDate(new DateTime(year, month, day, hour, minute, second, millisecond, calendar), offset); - } - - // Returns a DateTimeOffset representing the current date and time. The - // resolution of the returned value depends on the system timer. For - // Windows NT 3.5 and later the timer resolution is approximately 10ms, - // for Windows NT 3.1 it is approximately 16ms, and for Windows 95 and 98 - // it is approximately 55ms. - // - public static DateTimeOffset Now - { - get - { - return new DateTimeOffset(DateTime.Now); - } - } - - public static DateTimeOffset UtcNow - { - get - { - return new DateTimeOffset(DateTime.UtcNow); - } - } - - public DateTime DateTime - { - get - { - return ClockDateTime; - } - } - - public DateTime UtcDateTime - { - [Pure] - get - { - Contract.Ensures(Contract.Result().Kind == DateTimeKind.Utc); - return DateTime.SpecifyKind(m_dateTime, DateTimeKind.Utc); - } - } - - public DateTime LocalDateTime - { - [Pure] - get - { - Contract.Ensures(Contract.Result().Kind == DateTimeKind.Local); - return UtcDateTime.ToLocalTime(); - } - } - - // Adjust to a given offset with the same UTC time. Can throw ArgumentException - // - public DateTimeOffset ToOffset(TimeSpan offset) - { - return new DateTimeOffset((m_dateTime + offset).Ticks, offset); - } - - - // Instance Properties - - // The clock or visible time represented. This is just a wrapper around the internal date because this is - // the chosen storage mechanism. Going through this helper is good for readability and maintainability. - // This should be used for display but not identity. - private DateTime ClockDateTime - { - get - { - return new DateTime((m_dateTime + Offset).Ticks, DateTimeKind.Unspecified); - } - } - - // Returns the date part of this DateTimeOffset. The resulting value - // corresponds to this DateTimeOffset with the time-of-day part set to - // zero (midnight). - // - public DateTime Date - { - get - { - return ClockDateTime.Date; - } - } - - // Returns the day-of-month part of this DateTimeOffset. The returned - // value is an integer between 1 and 31. - // - public int Day - { - get - { - Contract.Ensures(Contract.Result() >= 1); - Contract.Ensures(Contract.Result() <= 31); - return ClockDateTime.Day; - } - } - - // Returns the day-of-week part of this DateTimeOffset. The returned value - // is an integer between 0 and 6, where 0 indicates Sunday, 1 indicates - // Monday, 2 indicates Tuesday, 3 indicates Wednesday, 4 indicates - // Thursday, 5 indicates Friday, and 6 indicates Saturday. - // - public DayOfWeek DayOfWeek - { - get - { - Contract.Ensures(Contract.Result() >= DayOfWeek.Sunday); - Contract.Ensures(Contract.Result() <= DayOfWeek.Saturday); - return ClockDateTime.DayOfWeek; - } - } - - // Returns the day-of-year part of this DateTimeOffset. The returned value - // is an integer between 1 and 366. - // - public int DayOfYear - { - get - { - Contract.Ensures(Contract.Result() >= 1); - Contract.Ensures(Contract.Result() <= 366); // leap year - return ClockDateTime.DayOfYear; - } - } - - // Returns the hour part of this DateTimeOffset. The returned value is an - // integer between 0 and 23. - // - public int Hour - { - get - { - Contract.Ensures(Contract.Result() >= 0); - Contract.Ensures(Contract.Result() < 24); - return ClockDateTime.Hour; - } - } - - - // Returns the millisecond part of this DateTimeOffset. The returned value - // is an integer between 0 and 999. - // - public int Millisecond - { - get - { - Contract.Ensures(Contract.Result() >= 0); - Contract.Ensures(Contract.Result() < 1000); - return ClockDateTime.Millisecond; - } - } - - // Returns the minute part of this DateTimeOffset. The returned value is - // an integer between 0 and 59. - // - public int Minute - { - get - { - Contract.Ensures(Contract.Result() >= 0); - Contract.Ensures(Contract.Result() < 60); - return ClockDateTime.Minute; - } - } - - // Returns the month part of this DateTimeOffset. The returned value is an - // integer between 1 and 12. - // - public int Month - { - get - { - Contract.Ensures(Contract.Result() >= 1); - return ClockDateTime.Month; - } - } - - public TimeSpan Offset - { - get - { - return new TimeSpan(0, m_offsetMinutes, 0); - } - } - - // Returns the second part of this DateTimeOffset. The returned value is - // an integer between 0 and 59. - // - public int Second - { - get - { - Contract.Ensures(Contract.Result() >= 0); - Contract.Ensures(Contract.Result() < 60); - return ClockDateTime.Second; - } - } - - // Returns the tick count for this DateTimeOffset. The returned value is - // the number of 100-nanosecond intervals that have elapsed since 1/1/0001 - // 12:00am. - // - public long Ticks - { - get - { - return ClockDateTime.Ticks; - } - } - - public long UtcTicks - { - get - { - return UtcDateTime.Ticks; - } - } - - // Returns the time-of-day part of this DateTimeOffset. The returned value - // is a TimeSpan that indicates the time elapsed since midnight. - // - public TimeSpan TimeOfDay - { - get - { - return ClockDateTime.TimeOfDay; - } - } - - // Returns the year part of this DateTimeOffset. The returned value is an - // integer between 1 and 9999. - // - public int Year - { - get - { - Contract.Ensures(Contract.Result() >= 1 && Contract.Result() <= 9999); - return ClockDateTime.Year; - } - } - - // Returns the DateTimeOffset resulting from adding the given - // TimeSpan to this DateTimeOffset. - // - public DateTimeOffset Add(TimeSpan timeSpan) - { - return new DateTimeOffset(ClockDateTime.Add(timeSpan), Offset); - } - - // Returns the DateTimeOffset resulting from adding a fractional number of - // days to this DateTimeOffset. The result is computed by rounding the - // fractional number of days given by value to the nearest - // millisecond, and adding that interval to this DateTimeOffset. The - // value argument is permitted to be negative. - // - public DateTimeOffset AddDays(double days) - { - return new DateTimeOffset(ClockDateTime.AddDays(days), Offset); - } - - // Returns the DateTimeOffset resulting from adding a fractional number of - // hours to this DateTimeOffset. The result is computed by rounding the - // fractional number of hours given by value to the nearest - // millisecond, and adding that interval to this DateTimeOffset. The - // value argument is permitted to be negative. - // - public DateTimeOffset AddHours(double hours) - { - return new DateTimeOffset(ClockDateTime.AddHours(hours), Offset); - } - - // Returns the DateTimeOffset resulting from the given number of - // milliseconds to this DateTimeOffset. The result is computed by rounding - // the number of milliseconds given by value to the nearest integer, - // and adding that interval to this DateTimeOffset. The value - // argument is permitted to be negative. - // - public DateTimeOffset AddMilliseconds(double milliseconds) - { - return new DateTimeOffset(ClockDateTime.AddMilliseconds(milliseconds), Offset); - } - - // Returns the DateTimeOffset resulting from adding a fractional number of - // minutes to this DateTimeOffset. The result is computed by rounding the - // fractional number of minutes given by value to the nearest - // millisecond, and adding that interval to this DateTimeOffset. The - // value argument is permitted to be negative. - // - public DateTimeOffset AddMinutes(double minutes) - { - return new DateTimeOffset(ClockDateTime.AddMinutes(minutes), Offset); - } - - public DateTimeOffset AddMonths(int months) - { - return new DateTimeOffset(ClockDateTime.AddMonths(months), Offset); - } - - // Returns the DateTimeOffset resulting from adding a fractional number of - // seconds to this DateTimeOffset. The result is computed by rounding the - // fractional number of seconds given by value to the nearest - // millisecond, and adding that interval to this DateTimeOffset. The - // value argument is permitted to be negative. - // - public DateTimeOffset AddSeconds(double seconds) - { - return new DateTimeOffset(ClockDateTime.AddSeconds(seconds), Offset); - } - - // Returns the DateTimeOffset resulting from adding the given number of - // 100-nanosecond ticks to this DateTimeOffset. The value argument - // is permitted to be negative. - // - public DateTimeOffset AddTicks(long ticks) - { - return new DateTimeOffset(ClockDateTime.AddTicks(ticks), Offset); - } - - // Returns the DateTimeOffset resulting from adding the given number of - // years to this DateTimeOffset. The result is computed by incrementing - // (or decrementing) the year part of this DateTimeOffset by value - // years. If the month and day of this DateTimeOffset is 2/29, and if the - // resulting year is not a leap year, the month and day of the resulting - // DateTimeOffset becomes 2/28. Otherwise, the month, day, and time-of-day - // parts of the result are the same as those of this DateTimeOffset. - // - public DateTimeOffset AddYears(int years) - { - return new DateTimeOffset(ClockDateTime.AddYears(years), Offset); - } - - // Compares two DateTimeOffset values, returning an integer that indicates - // their relationship. - // - public static int Compare(DateTimeOffset first, DateTimeOffset second) - { - return DateTime.Compare(first.UtcDateTime, second.UtcDateTime); - } - - // Compares this DateTimeOffset to a given object. This method provides an - // implementation of the IComparable interface. The object - // argument must be another DateTimeOffset, or otherwise an exception - // occurs. Null is considered less than any instance. - // - int IComparable.CompareTo(Object obj) - { - if (obj == null) return 1; - if (!(obj is DateTimeOffset)) - { - throw new ArgumentException(SR.Arg_MustBeDateTimeOffset); - } - - DateTime objUtc = ((DateTimeOffset)obj).UtcDateTime; - DateTime utc = UtcDateTime; - if (utc > objUtc) return 1; - if (utc < objUtc) return -1; - return 0; - } - - public int CompareTo(DateTimeOffset other) - { - DateTime otherUtc = other.UtcDateTime; - DateTime utc = UtcDateTime; - if (utc > otherUtc) return 1; - if (utc < otherUtc) return -1; - return 0; - } - - - // Checks if this DateTimeOffset is equal to a given object. Returns - // true if the given object is a boxed DateTimeOffset and its value - // is equal to the value of this DateTimeOffset. Returns false - // otherwise. - // - public override bool Equals(Object obj) - { - if (obj is DateTimeOffset) - { - return UtcDateTime.Equals(((DateTimeOffset)obj).UtcDateTime); - } - return false; - } - - public bool Equals(DateTimeOffset other) - { - return UtcDateTime.Equals(other.UtcDateTime); - } - - public bool EqualsExact(DateTimeOffset other) - { - // - // returns true when the ClockDateTime, Kind, and Offset match - // - // currently the Kind should always be Unspecified, but there is always the possibility that a future version - // of DateTimeOffset overloads the Kind field - // - return (ClockDateTime == other.ClockDateTime && Offset == other.Offset && ClockDateTime.Kind == other.ClockDateTime.Kind); - } - - // Compares two DateTimeOffset values for equality. Returns true if - // the two DateTimeOffset values are equal, or false if they are - // not equal. - // - public static bool Equals(DateTimeOffset first, DateTimeOffset second) - { - return DateTime.Equals(first.UtcDateTime, second.UtcDateTime); - } - - // Creates a DateTimeOffset from a Windows filetime. A Windows filetime is - // a long representing the date and time as the number of - // 100-nanosecond intervals that have elapsed since 1/1/1601 12:00am. - // - public static DateTimeOffset FromFileTime(long fileTime) - { - return new DateTimeOffset(DateTime.FromFileTime(fileTime)); - } - - public static DateTimeOffset FromUnixTimeSeconds(long seconds) - { - if (seconds < UnixMinSeconds || seconds > UnixMaxSeconds) - { - throw new ArgumentOutOfRangeException(nameof(seconds), - string.Format(SR.ArgumentOutOfRange_Range, UnixMinSeconds, UnixMaxSeconds)); - } - - long ticks = seconds * TimeSpan.TicksPerSecond + UnixEpochTicks; - return new DateTimeOffset(ticks, TimeSpan.Zero); - } - - public static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds) - { - const long MinMilliseconds = DateTime.MinTicks / TimeSpan.TicksPerMillisecond - UnixEpochMilliseconds; - const long MaxMilliseconds = DateTime.MaxTicks / TimeSpan.TicksPerMillisecond - UnixEpochMilliseconds; - - if (milliseconds < MinMilliseconds || milliseconds > MaxMilliseconds) - { - throw new ArgumentOutOfRangeException(nameof(milliseconds), - string.Format(SR.ArgumentOutOfRange_Range, MinMilliseconds, MaxMilliseconds)); - } - - long ticks = milliseconds * TimeSpan.TicksPerMillisecond + UnixEpochTicks; - return new DateTimeOffset(ticks, TimeSpan.Zero); - } - - // ----- SECTION: private serialization instance methods ----------------* - - void IDeserializationCallback.OnDeserialization(Object sender) - { - try - { - m_offsetMinutes = ValidateOffset(Offset); - m_dateTime = ValidateDate(ClockDateTime, Offset); - } - catch (ArgumentException e) - { - throw new SerializationException(SR.Serialization_InvalidData, e); - } - } - - - void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) - { - if (info == null) - { - throw new ArgumentNullException(nameof(info)); - } - - Contract.EndContractBlock(); - - info.AddValue("DateTime", m_dateTime); - info.AddValue("OffsetMinutes", m_offsetMinutes); - } - - - private DateTimeOffset(SerializationInfo info, StreamingContext context) - { - if (info == null) - { - throw new ArgumentNullException(nameof(info)); - } - - m_dateTime = (DateTime)info.GetValue("DateTime", typeof(DateTime)); - m_offsetMinutes = (Int16)info.GetValue("OffsetMinutes", typeof(Int16)); - } - - // Returns the hash code for this DateTimeOffset. - // - public override int GetHashCode() - { - return UtcDateTime.GetHashCode(); - } - - // Constructs a DateTimeOffset from a string. The string must specify a - // date and optionally a time in a culture-specific or universal format. - // Leading and trailing whitespace characters are allowed. - // - public static DateTimeOffset Parse(String input) - { - TimeSpan offset; - DateTime dateResult = DateTimeParse.Parse(input, - DateTimeFormatInfo.CurrentInfo, - DateTimeStyles.None, - out offset); - return new DateTimeOffset(dateResult.Ticks, offset); - } - - // Constructs a DateTimeOffset from a string. The string must specify a - // date and optionally a time in a culture-specific or universal format. - // Leading and trailing whitespace characters are allowed. - // - public static DateTimeOffset Parse(String input, IFormatProvider formatProvider) - { - return Parse(input, formatProvider, DateTimeStyles.None); - } - - public static DateTimeOffset Parse(String input, IFormatProvider formatProvider, DateTimeStyles styles) - { - styles = ValidateStyles(styles, nameof(styles)); - TimeSpan offset; - DateTime dateResult = DateTimeParse.Parse(input, - DateTimeFormatInfo.GetInstance(formatProvider), - styles, - out offset); - return new DateTimeOffset(dateResult.Ticks, offset); - } - - // Constructs a DateTimeOffset from a string. The string must specify a - // date and optionally a time in a culture-specific or universal format. - // Leading and trailing whitespace characters are allowed. - // - public static DateTimeOffset ParseExact(String input, String format, IFormatProvider formatProvider) - { - return ParseExact(input, format, formatProvider, DateTimeStyles.None); - } - - // Constructs a DateTimeOffset from a string. The string must specify a - // date and optionally a time in a culture-specific or universal format. - // Leading and trailing whitespace characters are allowed. - // - public static DateTimeOffset ParseExact(String input, String format, IFormatProvider formatProvider, DateTimeStyles styles) - { - styles = ValidateStyles(styles, nameof(styles)); - TimeSpan offset; - DateTime dateResult = DateTimeParse.ParseExact(input, - format, - DateTimeFormatInfo.GetInstance(formatProvider), - styles, - out offset); - return new DateTimeOffset(dateResult.Ticks, offset); - } - - public static DateTimeOffset ParseExact(String input, String[] formats, IFormatProvider formatProvider, DateTimeStyles styles) - { - styles = ValidateStyles(styles, nameof(styles)); - TimeSpan offset; - DateTime dateResult = DateTimeParse.ParseExactMultiple(input, - formats, - DateTimeFormatInfo.GetInstance(formatProvider), - styles, - out offset); - return new DateTimeOffset(dateResult.Ticks, offset); - } - - public TimeSpan Subtract(DateTimeOffset value) - { - return UtcDateTime.Subtract(value.UtcDateTime); - } - - public DateTimeOffset Subtract(TimeSpan value) - { - return new DateTimeOffset(ClockDateTime.Subtract(value), Offset); - } - - - public long ToFileTime() - { - return UtcDateTime.ToFileTime(); - } - - public long ToUnixTimeSeconds() - { - // Truncate sub-second precision before offsetting by the Unix Epoch to avoid - // the last digit being off by one for dates that result in negative Unix times. - // - // For example, consider the DateTimeOffset 12/31/1969 12:59:59.001 +0 - // ticks = 621355967990010000 - // ticksFromEpoch = ticks - UnixEpochTicks = -9990000 - // secondsFromEpoch = ticksFromEpoch / TimeSpan.TicksPerSecond = 0 - // - // Notice that secondsFromEpoch is rounded *up* by the truncation induced by integer division, - // whereas we actually always want to round *down* when converting to Unix time. This happens - // automatically for positive Unix time values. Now the example becomes: - // seconds = ticks / TimeSpan.TicksPerSecond = 62135596799 - // secondsFromEpoch = seconds - UnixEpochSeconds = -1 - // - // In other words, we want to consistently round toward the time 1/1/0001 00:00:00, - // rather than toward the Unix Epoch (1/1/1970 00:00:00). - long seconds = UtcDateTime.Ticks / TimeSpan.TicksPerSecond; - return seconds - UnixEpochSeconds; - } - - public long ToUnixTimeMilliseconds() - { - // Truncate sub-millisecond precision before offsetting by the Unix Epoch to avoid - // the last digit being off by one for dates that result in negative Unix times - long milliseconds = UtcDateTime.Ticks / TimeSpan.TicksPerMillisecond; - return milliseconds - UnixEpochMilliseconds; - } - - public DateTimeOffset ToLocalTime() - { - return ToLocalTime(false); - } - - internal DateTimeOffset ToLocalTime(bool throwOnOverflow) - { - return new DateTimeOffset(UtcDateTime.ToLocalTime(throwOnOverflow)); - } - - public override String ToString() - { - Contract.Ensures(Contract.Result() != null); - return DateTimeFormat.Format(ClockDateTime, null, DateTimeFormatInfo.CurrentInfo, Offset); - } - - public String ToString(String format) - { - Contract.Ensures(Contract.Result() != null); - return DateTimeFormat.Format(ClockDateTime, format, DateTimeFormatInfo.CurrentInfo, Offset); - } - - public String ToString(IFormatProvider formatProvider) - { - Contract.Ensures(Contract.Result() != null); - return DateTimeFormat.Format(ClockDateTime, null, DateTimeFormatInfo.GetInstance(formatProvider), Offset); - } - - public String ToString(String format, IFormatProvider formatProvider) - { - Contract.Ensures(Contract.Result() != null); - return DateTimeFormat.Format(ClockDateTime, format, DateTimeFormatInfo.GetInstance(formatProvider), Offset); - } - - public DateTimeOffset ToUniversalTime() - { - return new DateTimeOffset(UtcDateTime); - } - - public static Boolean TryParse(String input, out DateTimeOffset result) - { - TimeSpan offset; - DateTime dateResult; - Boolean parsed = DateTimeParse.TryParse(input, - DateTimeFormatInfo.CurrentInfo, - DateTimeStyles.None, - out dateResult, - out offset); - result = new DateTimeOffset(dateResult.Ticks, offset); - return parsed; - } - - public static Boolean TryParse(String input, IFormatProvider formatProvider, DateTimeStyles styles, out DateTimeOffset result) - { - styles = ValidateStyles(styles, nameof(styles)); - TimeSpan offset; - DateTime dateResult; - Boolean parsed = DateTimeParse.TryParse(input, - DateTimeFormatInfo.GetInstance(formatProvider), - styles, - out dateResult, - out offset); - result = new DateTimeOffset(dateResult.Ticks, offset); - return parsed; - } - - public static Boolean TryParseExact(String input, String format, IFormatProvider formatProvider, DateTimeStyles styles, - out DateTimeOffset result) - { - styles = ValidateStyles(styles, nameof(styles)); - TimeSpan offset; - DateTime dateResult; - Boolean parsed = DateTimeParse.TryParseExact(input, - format, - DateTimeFormatInfo.GetInstance(formatProvider), - styles, - out dateResult, - out offset); - result = new DateTimeOffset(dateResult.Ticks, offset); - return parsed; - } - - public static Boolean TryParseExact(String input, String[] formats, IFormatProvider formatProvider, DateTimeStyles styles, - out DateTimeOffset result) - { - styles = ValidateStyles(styles, nameof(styles)); - TimeSpan offset; - DateTime dateResult; - Boolean parsed = DateTimeParse.TryParseExactMultiple(input, - formats, - DateTimeFormatInfo.GetInstance(formatProvider), - styles, - out dateResult, - out offset); - result = new DateTimeOffset(dateResult.Ticks, offset); - return parsed; - } - - // Ensures the TimeSpan is valid to go in a DateTimeOffset. - private static Int16 ValidateOffset(TimeSpan offset) - { - Int64 ticks = offset.Ticks; - if (ticks % TimeSpan.TicksPerMinute != 0) - { - throw new ArgumentException(SR.Argument_OffsetPrecision, nameof(offset)); - } - if (ticks < MinOffset || ticks > MaxOffset) - { - throw new ArgumentOutOfRangeException(nameof(offset), SR.Argument_OffsetOutOfRange); - } - return (Int16)(offset.Ticks / TimeSpan.TicksPerMinute); - } - - // Ensures that the time and offset are in range. - private static DateTime ValidateDate(DateTime dateTime, TimeSpan offset) - { - // The key validation is that both the UTC and clock times fit. The clock time is validated - // by the DateTime constructor. - Debug.Assert(offset.Ticks >= MinOffset && offset.Ticks <= MaxOffset, "Offset not validated."); - // This operation cannot overflow because offset should have already been validated to be within - // 14 hours and the DateTime instance is more than that distance from the boundaries of Int64. - Int64 utcTicks = dateTime.Ticks - offset.Ticks; - if (utcTicks < DateTime.MinTicks || utcTicks > DateTime.MaxTicks) - { - throw new ArgumentOutOfRangeException(nameof(offset), SR.Argument_UTCOutOfRange); - } - // make sure the Kind is set to Unspecified - // - return new DateTime(utcTicks, DateTimeKind.Unspecified); - } - - private static DateTimeStyles ValidateStyles(DateTimeStyles style, String parameterName) - { - if ((style & DateTimeFormatInfo.InvalidDateTimeStyles) != 0) - { - throw new ArgumentException(SR.Argument_InvalidDateTimeStyles, parameterName); - } - if (((style & (DateTimeStyles.AssumeLocal)) != 0) && ((style & (DateTimeStyles.AssumeUniversal)) != 0)) - { - throw new ArgumentException(SR.Argument_ConflictingDateTimeStyles, parameterName); - } - if ((style & DateTimeStyles.NoCurrentDateDefault) != 0) - { - throw new ArgumentException(SR.Argument_DateTimeOffsetInvalidDateTimeStyles, parameterName); - } - - Contract.EndContractBlock(); - // RoundtripKind does not make sense for DateTimeOffset; ignore this flag for backward compatibility with DateTime - style &= ~DateTimeStyles.RoundtripKind; - - // AssumeLocal is also ignored as that is what we do by default with DateTimeOffset.Parse - style &= ~DateTimeStyles.AssumeLocal; - - return style; - } - - // Operators - - public static implicit operator DateTimeOffset(DateTime dateTime) - { - return new DateTimeOffset(dateTime); - } - - public static DateTimeOffset operator +(DateTimeOffset dateTimeOffset, TimeSpan timeSpan) - { - return new DateTimeOffset(dateTimeOffset.ClockDateTime + timeSpan, dateTimeOffset.Offset); - } - - - public static DateTimeOffset operator -(DateTimeOffset dateTimeOffset, TimeSpan timeSpan) - { - return new DateTimeOffset(dateTimeOffset.ClockDateTime - timeSpan, dateTimeOffset.Offset); - } - - public static TimeSpan operator -(DateTimeOffset left, DateTimeOffset right) - { - return left.UtcDateTime - right.UtcDateTime; - } - - public static bool operator ==(DateTimeOffset left, DateTimeOffset right) - { - return left.UtcDateTime == right.UtcDateTime; - } - - public static bool operator !=(DateTimeOffset left, DateTimeOffset right) - { - return left.UtcDateTime != right.UtcDateTime; - } - - public static bool operator <(DateTimeOffset left, DateTimeOffset right) - { - return left.UtcDateTime < right.UtcDateTime; - } - - public static bool operator <=(DateTimeOffset left, DateTimeOffset right) - { - return left.UtcDateTime <= right.UtcDateTime; - } - - public static bool operator >(DateTimeOffset left, DateTimeOffset right) - { - return left.UtcDateTime > right.UtcDateTime; - } - - public static bool operator >=(DateTimeOffset left, DateTimeOffset right) - { - return left.UtcDateTime >= right.UtcDateTime; - } - } -} diff --git a/src/coreclr/src/mscorlib/src/System/StringComparer.cs b/src/coreclr/src/mscorlib/src/System/StringComparer.cs deleted file mode 100644 index 42b35fc..0000000 --- a/src/coreclr/src/mscorlib/src/System/StringComparer.cs +++ /dev/null @@ -1,301 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - - -namespace System -{ - using System.Collections; - using System.Collections.Generic; - using System.Globalization; - using System.Diagnostics.Contracts; - using System.Runtime.Serialization; - using System.Runtime.CompilerServices; - - - [Serializable] - public abstract class StringComparer : IComparer, IEqualityComparer, IComparer, IEqualityComparer - { - private static readonly CultureAwareComparer _invariantCulture = new CultureAwareComparer(CultureInfo.InvariantCulture, false); - private static readonly CultureAwareComparer _invariantCultureIgnoreCase = new CultureAwareComparer(CultureInfo.InvariantCulture, true); - private static readonly OrdinalComparer _ordinal = new OrdinalComparer(); - private static readonly OrdinalIgnoreCaseComparer _ordinalIgnoreCase = new OrdinalIgnoreCaseComparer(); - - public static StringComparer InvariantCulture - { - get - { - Contract.Ensures(Contract.Result() != null); - return _invariantCulture; - } - } - - public static StringComparer InvariantCultureIgnoreCase - { - get - { - Contract.Ensures(Contract.Result() != null); - return _invariantCultureIgnoreCase; - } - } - - public static StringComparer CurrentCulture - { - get - { - Contract.Ensures(Contract.Result() != null); - return new CultureAwareComparer(CultureInfo.CurrentCulture, false); - } - } - - public static StringComparer CurrentCultureIgnoreCase - { - get - { - Contract.Ensures(Contract.Result() != null); - return new CultureAwareComparer(CultureInfo.CurrentCulture, true); - } - } - - public static StringComparer Ordinal - { - get - { - Contract.Ensures(Contract.Result() != null); - return _ordinal; - } - } - - public static StringComparer OrdinalIgnoreCase - { - get - { - Contract.Ensures(Contract.Result() != null); - return _ordinalIgnoreCase; - } - } - - // Convert a StringComparison to a StringComparer - public static StringComparer FromComparison(StringComparison comparisonType) - { - switch (comparisonType) - { - case StringComparison.CurrentCulture: - return CurrentCulture; - case StringComparison.CurrentCultureIgnoreCase: - return CurrentCultureIgnoreCase; - case StringComparison.InvariantCulture: - return InvariantCulture; - case StringComparison.InvariantCultureIgnoreCase: - return InvariantCultureIgnoreCase; - case StringComparison.Ordinal: - return Ordinal; - case StringComparison.OrdinalIgnoreCase: - return OrdinalIgnoreCase; - default: - throw new ArgumentException(SR.NotSupported_StringComparison, nameof(comparisonType)); - } - } - - public static StringComparer Create(CultureInfo culture, bool ignoreCase) - { - if (culture == null) - { - throw new ArgumentNullException(nameof(culture)); - } - Contract.Ensures(Contract.Result() != null); - Contract.EndContractBlock(); - - return new CultureAwareComparer(culture, ignoreCase); - } - - public int Compare(object x, object y) - { - if (x == y) return 0; - if (x == null) return -1; - if (y == null) return 1; - - String sa = x as String; - if (sa != null) - { - String sb = y as String; - if (sb != null) - { - return Compare(sa, sb); - } - } - - IComparable ia = x as IComparable; - if (ia != null) - { - return ia.CompareTo(y); - } - - throw new ArgumentException(SR.Argument_ImplementIComparable); - } - - - public new bool Equals(Object x, Object y) - { - if (x == y) return true; - if (x == null || y == null) return false; - - String sa = x as String; - if (sa != null) - { - String sb = y as String; - if (sb != null) - { - return Equals(sa, sb); - } - } - return x.Equals(y); - } - - public int GetHashCode(object obj) - { - if (obj == null) - { - throw new ArgumentNullException(nameof(obj)); - } - Contract.EndContractBlock(); - - string s = obj as string; - if (s != null) - { - return GetHashCode(s); - } - return obj.GetHashCode(); - } - - public abstract int Compare(String x, String y); - public abstract bool Equals(String x, String y); - public abstract int GetHashCode(string obj); - } - - [Serializable] - internal sealed class CultureAwareComparer : StringComparer -#if FEATURE_RANDOMIZED_STRING_HASHING - , IWellKnownStringEqualityComparer -#endif - { - private readonly CompareInfo _compareInfo; - private readonly CompareOptions _options; - - internal CultureAwareComparer(CultureInfo culture, bool ignoreCase) - { - _compareInfo = culture.CompareInfo; - _options = ignoreCase ? CompareOptions.IgnoreCase : CompareOptions.None; - } - - public override int Compare(string x, string y) - { - if (object.ReferenceEquals(x, y)) return 0; - if (x == null) return -1; - if (y == null) return 1; - return _compareInfo.Compare(x, y, _options); - } - - public override bool Equals(string x, string y) - { - if (object.ReferenceEquals(x, y)) return true; - if (x == null || y == null) return false; - return _compareInfo.Compare(x, y, _options) == 0; - } - - public override int GetHashCode(string obj) - { - if (obj == null) - { - throw new ArgumentNullException(nameof(obj)); - } - return _compareInfo.GetHashCodeOfString(obj, _options); - } - - // Equals method for the comparer itself. - public override bool Equals(object obj) - { - var comparer = obj as CultureAwareComparer; - return - comparer != null && - _options == comparer._options && - _compareInfo.Equals(comparer._compareInfo); - } - - public override int GetHashCode() - { - int hashCode = _compareInfo.GetHashCode(); - return _options == CompareOptions.None ? hashCode : ~hashCode; - } - -#if FEATURE_RANDOMIZED_STRING_HASHING - IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() => this; -#endif - } - - [Serializable] - internal sealed class OrdinalComparer : StringComparer -#if FEATURE_RANDOMIZED_STRING_HASHING - , IWellKnownStringEqualityComparer -#endif - { - public override int Compare(string x, string y) => string.CompareOrdinal(x, y); - - public override bool Equals(string x, string y) => string.Equals(x, y); - - public override int GetHashCode(string obj) - { - if (obj == null) - { - ThrowHelper.ThrowArgumentNullException(ExceptionArgument.obj); - } - return obj.GetHashCode(); - } - - // Equals/GetHashCode methods for the comparer itself. - public override bool Equals(object obj) => obj is OrdinalComparer; - public override int GetHashCode() => nameof(OrdinalComparer).GetHashCode(); - -#if FEATURE_RANDOMIZED_STRING_HASHING - IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() => this; -#endif - } - - [Serializable] - internal sealed class OrdinalIgnoreCaseComparer : StringComparer -#if FEATURE_RANDOMIZED_STRING_HASHING - , IWellKnownStringEqualityComparer -#endif - { - public override int Compare(string x, string y) => string.Compare(x, y, StringComparison.OrdinalIgnoreCase); - - public override bool Equals(string x, string y) => string.Equals(x, y, StringComparison.OrdinalIgnoreCase); - - public override int GetHashCode(string obj) - { - if (obj == null) - { - ThrowHelper.ThrowArgumentNullException(ExceptionArgument.obj); - } - return TextInfo.GetHashCodeOrdinalIgnoreCase(obj); - } - - // Equals/GetHashCode methods for the comparer itself. - public override bool Equals(object obj) => obj is OrdinalIgnoreCaseComparer; - public override int GetHashCode() => nameof(OrdinalIgnoreCaseComparer).GetHashCode(); - -#if FEATURE_RANDOMIZED_STRING_HASHING - IEqualityComparer IWellKnownStringEqualityComparer.GetEqualityComparerForSerialization() => this; -#endif - } - -#if FEATURE_RANDOMIZED_STRING_HASHING - // This interface is implemented by string comparers in the framework that can opt into - // randomized hashing behaviors. - internal interface IWellKnownStringEqualityComparer - { - // Get an IEqaulityComparer that can be serailzied (e.g., it exists in older versions). - IEqualityComparer GetEqualityComparerForSerialization(); - } -#endif -} diff --git a/src/coreclr/src/mscorlib/src/System/StringComparison.cs b/src/coreclr/src/mscorlib/src/System/StringComparison.cs deleted file mode 100644 index c654f72..0000000 --- a/src/coreclr/src/mscorlib/src/System/StringComparison.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -/*============================================================ -** -** Enum: StringComparison -** -** -** Purpose: A mechanism to expose a simplified infrastructure for -** Comparing strings. This enum lets you choose of the custom -** implementations provided by the runtime for the user. -** -** -===========================================================*/ - -namespace System -{ - [Serializable] - public enum StringComparison - { - CurrentCulture = 0, - CurrentCultureIgnoreCase = 1, - InvariantCulture = 2, - InvariantCultureIgnoreCase = 3, - Ordinal = 4, - OrdinalIgnoreCase = 5, - } -} -- 2.7.4