Как архитектор программного обеспечения, я бы очень хотел использовать NodaTime, но концепция «Локальный» делает наш код чрезвычайно трудным для работы (и это заставляет меня и мои команды гайки)! documentation, когда речь идет о «местный» и «глобальный» раз заявляет следующее:Почему LocalDateTime не является локальным датой и временем?
Основное различие заключается в том, что люди во всем мире согласятся на глобального значения а одновременно, в то время как все они могут видеть разные местные значения для того же глобального значения, из-за часовых поясов.
Это предложение определяет, что такое глобальное время, используя определение Локального времени. Поэтому, прежде чем мы сможем понять глобальное время, мы должны сначала понять, что такое Местное время.
Google (и многие другие словари аналогично) определяет "Local Time", как:
времени, как считаться в конкретном регионе или часового пояса.
- время в определенном месте, измеренное от прохождения солнца над меридианом в этом месте, определенное как полдень.
Так, местное время в определенное время, которое определяется (или связан с) часового пояса в - получил. Теперь мы полностью понимаем, что означает глобальное время; не в порядке, следующее предложение:
Локальное значение имеет не связано часового пояса в Noda времени;
Подождите! Что за...?! Документация, только что сделанная, определяющая глобальное время, используя общепринятое определение локального времени (которое - это, связанное с часовым поясом), и теперь они решают полностью отрицать его смысл, если это правда, что означает глобальное время? ИМХО, абсолютно ничего.
документация переходит к государству ...
, в частности, это не просто «дата и время прикреплено к местному времени компьютера работает код»
у меня есть две проблемы с этим утверждением:
- документация не может с помощью универсальное определение «местное время» до попробуйте, чтобы описать, что это такое. Это как сказать:
X is equal to (NOT X) is true
. - Поскольку использование даты и времени компьютера составляет точно определение «Местное время», то что я могу назвать местным временем?
Я голосую за то, что мы используем лучшее определение, чем «Местное», как насчет слова «Сырье»? Что означает:
Быть в естественном состоянии или почти в естественном состоянии: не обрабатывается и не очищается.
Хммм ....
А [сырые] значение имеет нет ассоциированных часового пояса в Noda времени; , в частности, это не просто «дата и время прикреплено к местному времени компьютера работает код»
Теперь, больше походит на определение документации пытается передать.
Возможно, кто-то может придумать лучшее слово, чем «Сырье»; но дело в том, пожалуйста, верните реальный смысл «Местный», поскольку «Локальный» имеет очень реальное и очень полезное значение в программном обеспечении и в жизни.
Таким образом, мы можем переименовать Local[Date][Time]
классы Raw[Date][Time]
и (необязательно) добавлять новые классы, называемые Local[Date][Time]
, что является привязан к локальной временной зоне компьютера?
@Michal & @J ... -
Проблема, которую мы имеем, не понимая LocalDateTime
в 'наш' местный (потому что это неподпоясанный). Проблема, которую мы имеем с LocalDateTime, заключается в том, что она is без зонирования. По существу, LocalDateTime
должен быть, по определению, особым типом ZonedDateTime
. (Так же, как и UTC, концептуально (и конкретно) особый тип ZonedDateTime
. Таким образом, UTC может иметь собственный набор типов, например: Utc[Date][Time]
, что, учитывая правильную проблемную область, может быть очень полезным. И поскольку UtcDateTime
не имеет «мы взяли», мы могли бы создать такую концепцию, не вмешиваясь в NodaTime.)
Назад к нашей проблеме, например: если у меня есть два ZonedDateTimes, один из Нью-Йорка и другой из Сиэтла, и я хочу изучить эти два ZonedDateTimes из моего текущего местоположения (скажем: Даллас). Я хотел бы написать ...
LocalDateTime fromNy = newYork.LocalDateTime;
LocalDateTime fromWa = seattle.LocalDateTime;
Но вместо этого, я получаю два несвязанных местного времени даты, которые не имеют абсолютно никаких отношений друг с другом. На самом деле, если бы не имена var, я бы не знал, что есть.
Что я хочу, это два ZonedDateTimes, которые были преобразованы в мой местный часовой пояс, как предлагает название свойства. Теперь эти два значения LocalDateTime (где LocalDateTime - особый тип ZonedDateTime) имеют соответствующее значение.Я знаю, что могу получить то, что близко к тому, что я хочу, делая следующее: но он грязный, не передает одну и ту же семантику и теряет информацию о часовом поясе.
DateTimeZone ct = BclDateTimeZone.ForSystemDefault();
LocalDateTime tx1 = newYork.WithZone(ct);
LocalDateTime tx2 = seattle.WithZone(ct);
Я хотел бы также, чтобы иметь возможность преобразовать значения снова как так:
ZonedDateTime wa = tx2.WithZone(seattleTimeZone);
ZonedDateTime nw = tx2.WithZone(nyTimeZone);
Что также позволит:
instant.InUtc();
instant.InZone(zone);
instant.InLocal();
Таким образом, имея возможность отображения мгновенного к 3 наиболее частым часовым поясам; UTC, местные и другие. Но я не могу, поскольку LocalDateTime не является особым типом ZonedDateTime.
IMHO, NodaTime 1.x хорошо, но он не является гибким (или жидким), достаточным для использования в прайм-тайм. Но хорошая новость заключается в том, что это далеко не так. Надеемся, что в 2.0 (или раньше) эти проблемы могут быть решены.
@Michal - Мне нравится ваша идея Noda[Date][Time]
в отличие от Raw[Date][Time]
.
Спасибо, вы правы. Должность не была заявлена как вопрос. - Теперь исправлено. – Kaboo
«IMHO, NodaTime 1.x приятный, но он не является гибким (или жидким), достаточным для использования в прайм-тайм». Я не вижу никаких доказательств этого в вашем посте, кроме того, что вам не нравится наше использование термина «Локальный» (который соответствует как Joda Time, так и java.time, кстати). Все, что вам нужно сделать, это использовать часовой пояс вашей системы по умолчанию для 'ZonedDateTime', и все в порядке, не так ли? Обратите внимание, что 'WithZone' не возвращает' LocalDateTime', он возвращает 'ZonedDateTime' (именно потому, что у него есть зона). Я бы также предположил, что часовой пояс системы по умолчанию почти никогда не является полезным в работе на стороне сервера. Более того, на стороне клиента. –
Я голосую, чтобы закрыть этот вопрос как вне темы, потому что нет ответного вопроса. Такая обратная связь отличная, но относится к дискуссионной группе, а не к StackOverflow. –