Я хочу создать пользовательскую (несуществующую) TimeZone, которая следует точно таким же правилам, как Европа/Лондон, однако единственная разница в том, что смещение должно быть -5 часов с UTC..NET NodaTime Как создать пользовательский TimeZone?
Для целей тестирования это то, что я пытался. Как указать дневные блики? Или эта реализация полностью неверна?
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));
}
}
Я раньше не использовал NodaTime, но могу вам сказать, что ваша функция GetHashCode полностью ошибочна. Он должен вернуть значение, которое является относительно уникальным, чтобы идентифицировать разные значения. Я бы рекомендовал вернуть хэш-код идентификатора зоны. Я предполагаю, что базовый класс уже должен делать что-то подобное. –
Спасибо за ваш ответ. Я обязательно исправлю это. –
Я не думаю, что у NodaTime есть API, чтобы сделать это легко, но я уверен, что Джон придет, чтобы ответить на это достаточно скоро. :) Любопытно, что для этого используется бизнес/применение? Мне всегда любопытно, когда люди говорят, что им нужны часовые пояса. Фактически, реальное использование в реальном мире действительно не нуждается в этом, насколько я знаю. –