Я хочу создать пользовательский (несуществующий) часовой пояс, который следует точно тем же правилам, что и Европа/Лондон, однако единственное отличие состоит в том, что смещение должно составлять -5 часов от UTC.
В целях тестирования, это то, что я пытался. Как указать летнее время? Или эта реализация совершенно неверна?
public class MyTimeZone : DateTimeZone
{
public MyTimeZone()
: base("MyTimeZone", true, Offset.FromHours(-5), Offset.FromHours(-5))
{
}
protected override bool EqualsImpl(DateTimeZone zone)
{
if (zone.Id == "MyTimeZone")
return true;
return false;
}
public override int GetHashCode()
{
return 0001;
}
public override NodaTime.TimeZones.ZoneInterval GetZoneInterval(Instant instant)
{
return new ZoneInterval("MyTimeZone", new Instant(DateTime.MinValue.Ticks), new Instant(DateTime.MaxValue.Ticks), Offset.FromHours(-5), Offset.FromHours(-5));
}
}
GetHashCode
совершенно неверна. Он должен возвращать значение, которое является относительно уникальным, чтобы идентифицировать разные значения. Я бы рекомендовал вернуть хэш-код идентификатора зоны. Я предполагаю, что базовый класс уже должен делать что-то подобное. - person Bradley Uffner   schedule 20.09.2016GetHashCode
. Обычно это не оптимально, но всегда подчиняется контрактуGetHashCode
. Вернуть хеш идентификатора было бы лучше, конечно... но сказать, что это совершенно неправильно, это... совершенно неправильно. - person Jon Skeet   schedule 20.09.2016