Как я получаю время UTC “полуночи” для данного часового пояса?

В Scala вы можете использовать implicits для добавления методов isEmpty() и nonEmpty() в API DataFrame, что сделает код более приятным для чтения.

object DataFrameExtensions {
  implicit def extendedDataFrame(dataFrame: DataFrame): ExtendedDataFrame = 
    new ExtendedDataFrame(dataFrame: DataFrame)

  class ExtendedDataFrame(dataFrame: DataFrame) {
    def isEmpty(): Boolean = {
      Try{dataFrame.first.length != 0} match {
        case Success(_) => false
        case Failure(_) => true 
      }
    }

    def nonEmpty(): Boolean = !isEmpty
  }
}

Здесь другие методы также могут быть добавлены. Чтобы использовать неявное преобразование, используйте import DataFrameExtensions._ в файле, который вы хотите использовать расширенную функциональность. Впоследствии методы могут использоваться непосредственно так:

val df: DataFrame = ...
if (df.isEmpty) {
  // Do something
}
41
задан Tom 17 December 2008 в 11:11
поделиться

3 ответа

Я думаю, что можно сбрить несколько вызовов метода, если Вы делаете это как это:

>>> from datetime import datetime
>>> datetime.now(pytz.timezone("Australia/Melbourne")) \
            .replace(hour=0, minute=0, second=0, microsecond=0) \
            .astimezone(pytz.utc)

BUT†¦ существует большая проблема, чем эстетика в Вашем коде: это даст неправильный результат в день переключателя к или с Летнего времени.

причина этого состоит в том, что ни конструкторы даты и времени, ни replace() не принимают изменения DST во внимание.

, Например:

>>> now = datetime(2012, 4, 1, 5, 0, 0, 0, tzinfo=pytz.timezone("Australia/Melbourne"))
>>> print now
2012-04-01 05:00:00+10:00
>>> print now.replace(hour=0)
2012-04-01 00:00:00+10:00 # wrong! midnight was at 2012-04-01 00:00:00+11:00
>>> print datetime(2012, 3, 1, 0, 0, 0, 0, tzinfo=tz)
2012-03-01 00:00:00+10:00 # wrong again!

Однако документация для tz.localize() состояния:

Этот метод должен использоваться, чтобы создать localtimes, вместо того, чтобы передать tzinfo аргумент конструктору даты и времени.

Таким образом, Ваша проблема решена как так:

>>> import pytz
>>> from datetime import datetime, date, time

>>> tz = pytz.timezone("Australia/Melbourne")
>>> the_date = date(2012, 4, 1) # use date.today() here

>>> midnight_without_tzinfo = datetime.combine(the_date, time())
>>> print midnight_without_tzinfo
2012-04-01 00:00:00

>>> midnight_with_tzinfo = tz.localize(midnight_without_tzinfo)
>>> print midnight_with_tzinfo
2012-04-01 00:00:00+11:00

>>> print midnight_with_tzinfo.astimezone(pytz.utc)
2012-03-31 13:00:00+00:00

Никакие гарантии дат до 1582, все же.

63
ответ дан 23 September 2019 в 15:13
поделиться

Установка переменной среды TZ изменяет то, с чем работают функции даты и времени Python часового пояса.

>>> time.gmtime()
(2008, 12, 17, 1, 16, 46, 2, 352, 0)
>>> time.localtime()
(2008, 12, 16, 20, 16, 47, 1, 351, 0)
>>> os.environ['TZ']='Australia/Melbourne'
>>> time.localtime()
(2008, 12, 17, 12, 16, 53, 2, 352, 1)
0
ответ дан Ignacio Vazquez-Abrams 23 September 2019 в 15:13
поделиться

Каждый часовой пояс имеет число, например, американский/центральный =-6. Это определяется как смещение в часах до UTC. С тех пор 0000 полночь, можно просто использовать это смещение для нахождения времени в любом часовом поясе, когда это - полночь UTC. Для доступа к этому я полагаю, что можно использовать

 time.timezone

Согласно , Документы Python , time.timezone на самом деле дает отрицательную величину этого числа:

<блок цитирования> time.timezone

смещение локального (не-DST) часовой пояс, в секундах к западу от UTC (отрицательный в большей части Западной Европы, положительной в США, нуле в Великобритании).

, Таким образом, Вы просто использовали бы то число в течение времени в часах, если это положительно (т.е. если это - полночь в Чикаго (который имеет +6 значений часового пояса), тогда это 6000 = 6:00 UTC).

, Если число отрицательно, вычтите от 24. Например, Берлин дал бы-1, таким образом, 24 - 1 => 2300 = 23:00.

0
ответ дан Jonathan Leffler 23 September 2019 в 15:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: