You've already forked linux-packaging-mono
Imported Upstream version 5.20.1.12
Former-commit-id: a44e4f5d88f923f0c98bbc6104e8bf0f469c3ba3
This commit is contained in:
parent
6220b8eaaf
commit
397341fa61
@ -769,7 +769,7 @@ namespace System
|
||||
return GetUtcOffset (dateTimeOffset.UtcDateTime, out isDST);
|
||||
}
|
||||
|
||||
private TimeSpan GetUtcOffset (DateTime dateTime, out bool isDST)
|
||||
private TimeSpan GetUtcOffset (DateTime dateTime, out bool isDST, bool forOffset = false)
|
||||
{
|
||||
isDST = false;
|
||||
|
||||
@ -781,7 +781,7 @@ namespace System
|
||||
tz = TimeZoneInfo.Local;
|
||||
|
||||
bool isTzDst;
|
||||
var tzOffset = GetUtcOffsetHelper (dateTime, tz, out isTzDst);
|
||||
var tzOffset = GetUtcOffsetHelper (dateTime, tz, out isTzDst, forOffset);
|
||||
|
||||
if (tz == this) {
|
||||
isDST = isTzDst;
|
||||
@ -792,11 +792,11 @@ namespace System
|
||||
if (!TryAddTicks (dateTime, -tzOffset.Ticks, out utcDateTime, DateTimeKind.Utc))
|
||||
return BaseUtcOffset;
|
||||
|
||||
return GetUtcOffsetHelper (utcDateTime, this, out isDST);
|
||||
return GetUtcOffsetHelper (utcDateTime, this, out isDST, forOffset);
|
||||
}
|
||||
|
||||
// This is an helper method used by the method above, do not use this on its own.
|
||||
private static TimeSpan GetUtcOffsetHelper (DateTime dateTime, TimeZoneInfo tz, out bool isDST)
|
||||
private static TimeSpan GetUtcOffsetHelper (DateTime dateTime, TimeZoneInfo tz, out bool isDST, bool forOffset = false)
|
||||
{
|
||||
if (dateTime.Kind == DateTimeKind.Local && tz != TimeZoneInfo.Local)
|
||||
throw new Exception ();
|
||||
@ -807,7 +807,7 @@ namespace System
|
||||
return TimeSpan.Zero;
|
||||
|
||||
TimeSpan offset;
|
||||
if (tz.TryGetTransitionOffset(dateTime, out offset, out isDST))
|
||||
if (tz.TryGetTransitionOffset(dateTime, out offset, out isDST, forOffset))
|
||||
return offset;
|
||||
|
||||
if (dateTime.Kind == DateTimeKind.Utc) {
|
||||
@ -834,10 +834,12 @@ namespace System
|
||||
|
||||
if (tzRule != null && tz.IsInDST (tzRule, dateTime)) {
|
||||
// Replicate what .NET does when given a time which falls into the hour which is lost when
|
||||
// DST starts. isDST should always be true but the offset should be BaseUtcOffset without the
|
||||
// DST starts. isDST should be false and the offset should be BaseUtcOffset without the
|
||||
// DST delta while in that hour.
|
||||
isDST = true;
|
||||
if (forOffset)
|
||||
isDST = true;
|
||||
if (tz.IsInDST (tzRule, dstUtcDateTime)) {
|
||||
isDST = true;
|
||||
return tz.BaseUtcOffset + tzRule.DaylightDelta;
|
||||
} else {
|
||||
return tz.BaseUtcOffset;
|
||||
@ -946,7 +948,21 @@ namespace System
|
||||
|
||||
public bool IsDaylightSavingTime (DateTimeOffset dateTimeOffset)
|
||||
{
|
||||
return IsDaylightSavingTime (dateTimeOffset.DateTime);
|
||||
var dateTime = dateTimeOffset.DateTime;
|
||||
|
||||
if (dateTime.Kind == DateTimeKind.Local && IsInvalidTime (dateTime))
|
||||
throw new ArgumentException ("dateTime is invalid and Kind is Local");
|
||||
|
||||
if (this == TimeZoneInfo.Utc)
|
||||
return false;
|
||||
|
||||
if (!SupportsDaylightSavingTime)
|
||||
return false;
|
||||
|
||||
bool isDst;
|
||||
GetUtcOffset (dateTime, out isDst, true);
|
||||
|
||||
return isDst;
|
||||
}
|
||||
|
||||
internal DaylightTime GetDaylightChanges (int year)
|
||||
@ -1183,7 +1199,7 @@ namespace System
|
||||
return null;
|
||||
}
|
||||
|
||||
private bool TryGetTransitionOffset (DateTime dateTime, out TimeSpan offset,out bool isDst)
|
||||
private bool TryGetTransitionOffset (DateTime dateTime, out TimeSpan offset, out bool isDst, bool forOffset = false)
|
||||
{
|
||||
offset = BaseUtcOffset;
|
||||
isDst = false;
|
||||
@ -1204,13 +1220,22 @@ namespace System
|
||||
return false;
|
||||
}
|
||||
|
||||
AdjustmentRule current = GetApplicableRule(date);
|
||||
AdjustmentRule current = GetApplicableRule (date);
|
||||
if (current != null) {
|
||||
DateTime tStart = TransitionPoint(current.DaylightTransitionStart, date.Year);
|
||||
DateTime tEnd = TransitionPoint(current.DaylightTransitionEnd, date.Year);
|
||||
DateTime tStart = TransitionPoint (current.DaylightTransitionStart, date.Year);
|
||||
DateTime tEnd = TransitionPoint (current.DaylightTransitionEnd, date.Year);
|
||||
TryAddTicks (tStart, -BaseUtcOffset.Ticks, out tStart, DateTimeKind.Utc);
|
||||
TryAddTicks (tEnd, -BaseUtcOffset.Ticks, out tEnd, DateTimeKind.Utc);
|
||||
if ((date >= tStart) && (date <= tEnd)) {
|
||||
offset = baseUtcOffset + current.DaylightDelta;
|
||||
isDst = true;
|
||||
if (forOffset)
|
||||
isDst = true;
|
||||
offset = baseUtcOffset;
|
||||
if (date >= new DateTime (tStart.Ticks + current.DaylightDelta.Ticks, DateTimeKind.Utc))
|
||||
{
|
||||
offset += current.DaylightDelta;
|
||||
isDst = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user