@@ -1009,21 +1009,12 @@ private static void TZif_GenerateAdjustmentRule(ref int index, TimeSpan timeZone
1009
1009
// NOTE: index == dts.Length
1010
1010
DateTime startTransitionDate = dts [ index - 1 ] ;
1011
1011
1012
- if ( ! string . IsNullOrEmpty ( futureTransitionsPosixFormat ) )
1013
- {
1014
- AdjustmentRule r = TZif_CreateAdjustmentRuleForPosixFormat ( futureTransitionsPosixFormat , startTransitionDate , timeZoneBaseUtcOffset ) ;
1015
-
1016
- if ( r != null )
1017
- {
1018
- if ( ! IsValidAdjustmentRuleOffest ( timeZoneBaseUtcOffset , r ) )
1019
- {
1020
- NormalizeAdjustmentRuleOffset ( timeZoneBaseUtcOffset , ref r ) ;
1021
- }
1022
-
1023
- rulesList . Add ( r ) ;
1024
- }
1025
- }
1026
- else
1012
+ // pulled in from this fix
1013
+ // https://github.com/dotnet/runtime/pull/458/
1014
+ AdjustmentRule r = ! string . IsNullOrEmpty ( futureTransitionsPosixFormat ) ?
1015
+ TZif_CreateAdjustmentRuleForPosixFormat ( futureTransitionsPosixFormat , startTransitionDate , timeZoneBaseUtcOffset ) :
1016
+ null ;
1017
+ if ( r == null )
1027
1018
{
1028
1019
// just use the last transition as the rule which will be used until the end of time
1029
1020
@@ -1032,22 +1023,22 @@ private static void TZif_GenerateAdjustmentRule(ref int index, TimeSpan timeZone
1032
1023
TimeSpan daylightDelta = transitionType . IsDst ? transitionOffset : TimeSpan . Zero ;
1033
1024
TimeSpan baseUtcDelta = transitionType . IsDst ? TimeSpan . Zero : transitionOffset ;
1034
1025
1035
- AdjustmentRule r = AdjustmentRule . CreateAdjustmentRule (
1026
+ r = AdjustmentRule . CreateAdjustmentRule (
1036
1027
startTransitionDate ,
1037
1028
DateTime . MaxValue ,
1038
1029
daylightDelta ,
1039
- default ( TransitionTime ) ,
1040
- default ( TransitionTime ) ,
1030
+ default ,
1031
+ default ,
1041
1032
baseUtcDelta ,
1042
1033
noDaylightTransitions : true ) ;
1034
+ }
1043
1035
1044
- if ( ! IsValidAdjustmentRuleOffest ( timeZoneBaseUtcOffset , r ) )
1045
- {
1046
- NormalizeAdjustmentRuleOffset ( timeZoneBaseUtcOffset , ref r ) ;
1047
- }
1048
-
1049
- rulesList . Add ( r ) ;
1036
+ if ( ! IsValidAdjustmentRuleOffest ( timeZoneBaseUtcOffset , r ) )
1037
+ {
1038
+ NormalizeAdjustmentRuleOffset ( timeZoneBaseUtcOffset , ref r ) ;
1050
1039
}
1040
+
1041
+ rulesList . Add ( r ) ;
1051
1042
}
1052
1043
1053
1044
index ++ ;
@@ -1141,15 +1132,20 @@ private static AdjustmentRule TZif_CreateAdjustmentRuleForPosixFormat(string pos
1141
1132
daylightSavingsTimeSpan = TZif_CalculateTransitionOffsetFromBase ( daylightSavingsTimeSpan , baseOffset ) ;
1142
1133
}
1143
1134
1144
- TransitionTime dstStart = TZif_CreateTransitionTimeFromPosixRule ( start , startTime ) ;
1145
- TransitionTime dstEnd = TZif_CreateTransitionTimeFromPosixRule ( end , endTime ) ;
1135
+ TransitionTime ? dstStart = TZif_CreateTransitionTimeFromPosixRule ( start , startTime ) ;
1136
+ TransitionTime ? dstEnd = TZif_CreateTransitionTimeFromPosixRule ( end , endTime ) ;
1137
+
1138
+ if ( dstStart == null || dstEnd == null )
1139
+ {
1140
+ return null ;
1141
+ }
1146
1142
1147
1143
return AdjustmentRule . CreateAdjustmentRule (
1148
1144
startTransitionDate ,
1149
1145
DateTime . MaxValue ,
1150
1146
daylightSavingsTimeSpan ,
1151
- dstStart ,
1152
- dstEnd ,
1147
+ dstStart . GetValueOrDefault ( ) ,
1148
+ dstEnd . GetValueOrDefault ( ) ,
1153
1149
baseOffset ,
1154
1150
noDaylightTransitions : false ) ;
1155
1151
}
@@ -1240,11 +1236,11 @@ private static DateTime ParseTimeOfDay(string time)
1240
1236
return timeOfDay ;
1241
1237
}
1242
1238
1243
- private static TransitionTime TZif_CreateTransitionTimeFromPosixRule ( string date , string time )
1239
+ private static TransitionTime ? TZif_CreateTransitionTimeFromPosixRule ( string date , string time )
1244
1240
{
1245
1241
if ( string . IsNullOrEmpty ( date ) )
1246
1242
{
1247
- return default ( TransitionTime ) ;
1243
+ return null ;
1248
1244
}
1249
1245
1250
1246
if ( date [ 0 ] == 'M' )
@@ -1290,7 +1286,8 @@ private static TransitionTime TZif_CreateTransitionTimeFromPosixRule(string date
1290
1286
//
1291
1287
// If we need to support n format, we'll have to have a floating adjustment rule support this case.
1292
1288
1293
- throw new InvalidTimeZoneException ( SR . InvalidTimeZone_NJulianDayNotSupported ) ;
1289
+ // Since we can't support this rule, return null to indicate to skip the POSIX rule.
1290
+ return null ;
1294
1291
}
1295
1292
1296
1293
// Julian day
0 commit comments