Учитывая дату в UTC времени, как я узнаю, что это в настоящее время тот же день где-нибудь еще в мире? - PullRequest
2 голосов
/ 13 сентября 2010

Предположим, у меня есть определенный UTC время T. Я хотел бы получить метод, который возвращает true, если возможно, что хотя бы одно место где-нибудь еще на Земле имеет такую ​​же локальную дату , как T прямо сейчас.

def still_same_date?(t)
  # true
  #   if it is the same day at some other place on Earth
  # false
  #   otherwise
end

Например, скажем, T сегодня в 0:01 по местному времени. Тогда ясно, что это правда, потому что в любом месте к востоку от меня также будет сегодняшняя дата (в тех местах это будет позже).

Но если T вчера в 16:00 по местному времени, то уже не очевидно, что есть другое место на Земле, у которого еще есть эта дата.

И если T 1 января 2000 года в 6:58 вечера по местному времени, то очевидно, что на Земле есть другое место с такой же датой.

Как мне написать still_same_date?, чтобы он возвращал то, что я хочу?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2010

Обычно, если DateTime.UtcNow составляет +/- 12 часов от даты UTC, вы должны вернуть true ... если я вас правильно понял.

2 голосов
/ 13 сентября 2010

Хорошо, чтобы уточнить это, у вас есть две части информации:

  • мгновенное UTC
  • Дата

Вы хотите узнать, существуют ли в данный момент UTC какие-либо часовые пояса, в которых указана дата. Обратите внимание, что ваш разговор о «сегодня» в вопросе не дает уникального значения для даты (из-за разных часовых поясов - мое «сегодня» может не совпадать с вашим), именно поэтому я явно сформулировал его в терминах функции с двумя параметрами.

По сути, вам нужно выполнить итерацию. Псевдокод:

for each time zone tz
  localTime = tz.GetLocalTime(utc)
  if (localTime.GetDate() == targetDate)
    return true

return false

Теперь вы можете определенно оптимизировать это, находя самые большие и самые маленькие смещения часового пояса, которые дадут вам «истинный» результат, и применяя границы. Я не могу вспомнить, каковы самые большие и самые маленькие смещения, когда-либо, но я бы безопасно предположил, что если вам нужно больше +15 или меньше -15, вы можете немедленно вернуть false.

Вы также можете сократить проверяемые часовые пояса, чтобы использовать только те, которые, как известно, находятся на пределе в определенный момент истории .

Если только это не критично для производительности, я бы написал простой код и оставил бы TODO для оптимизации:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...