Skip to content

Instantly share code, notes, and snippets.

@EgorBo
Created October 13, 2017 22:39
Show Gist options
  • Save EgorBo/6bb55b4672f273399fbb68bf340a1d4a to your computer and use it in GitHub Desktop.
Save EgorBo/6bb55b4672f273399fbb68bf340a1d4a to your computer and use it in GitHub Desktop.
using System;
namespace ConsoleApp4
{
class Program
{
private static TimeZoneInfo.TransitionTime CreateFixedDateRule(DateTime dateTime)
{
var time = new DateTime(dateTime.Ticks - dateTime.Date.Ticks);
return TimeZoneInfo.TransitionTime.CreateFixedDateRule(time, dateTime.Month, dateTime.Day);
}
static void Main(string[] args)
{
var dst1Start = new DateTime(2014, 5, 16);
var dst1End = new DateTime(2014, 6, 29);
var dst2Start = new DateTime(2014, 7, 29);
var dst2End = new DateTime(2014, 9, 26);
var baseUtcOffset = new TimeSpan(2, 0, 0);
var dstUtcOffset = new TimeSpan(3, 0, 0);
var dstOffset = dstUtcOffset - baseUtcOffset;
var rule1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(
new DateTime(2014, 1, 1), new DateTime(2014, 6, 30), dstOffset,
CreateFixedDateRule(dst1Start), CreateFixedDateRule(dst1End));
var rule2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(
new DateTime(2014, 7, 1), new DateTime(2014, 12, 31), dstOffset,
CreateFixedDateRule(dst2Start), CreateFixedDateRule(dst2End));
var cairo = TimeZoneInfo.CreateCustomTimeZone("Africa/Cairo", baseUtcOffset, "Africa/Cairo", "EET", "EEST", new[] { rule1, rule2 });
Console.WriteLine(cairo.GetUtcOffset(dst1End.Add(-dstOffset)));
//MONO: 03:00:00
//.NET and .NET Core: 02:00:00
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment