亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從日期時間獲取一年中的小時數

從日期時間獲取一年中的小時數

牧羊人nacy 2023-06-20 17:36:22
有沒有一種簡單的方法可以從日期時間獲取一年中的小時數?dt = datetime(2019, 1, 3, 00, 00, 00) # 03/01/2019 00:00 dt_hour = dt.hour_of_year() # should be something like that預期輸出:dt_hour = 48獲得minutes_of_year和seconds_of_year
查看完整描述

5 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

自己實現的一種方法是:

def hour_of_year(dt): 
    beginning_of_year = datetime.datetime(dt.year, 1, 1, tzinfo=dt.tzinfo)
        return (dt - beginning_of_year).total_seconds() // 3600

這首先創建一個新的 datetime 對象來表示年初。然后我們計算自年初以來的時間(以秒為單位),除以 3600 并取整數部分以獲得自年初以來經過的完整小時數。

請注意,使用對象days的屬性timedelta將僅返回自年初以來的完整天數。


查看完整回答
反對 回復 2023-06-20
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

您可以使用timedelta:


import datetime

dt = datetime.datetime(2019, 1, 3, 00, 00, 00)

dt2 = datetime.datetime(2019, 1, 1, 00, 00, 00)

print((dt-dt2).days*24)

輸出:


48


查看完整回答
反對 回復 2023-06-20
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

所有三個函數,重用它們的代碼。


import datetime


def minutes_of_year(dt):

    return seconds_of_year(dt) // 60


def hours_of_year(dt):

    return minutes_of_year(dt) // 60


def seconds_of_year(dt):

    dt0 = datetime.datetime(dt.year, 1, 1, tzinfo=dt.tzinfo)

    delta = dt-dt0

    return int(delta.total_seconds())

編輯以考慮可能的時區信息。


或者:子類 datetime,以便在以后的項目中更容易重用:


import datetime


class MyDateTime(datetime.datetime):

    def __new__(cls, *args, **kwargs):

        return datetime.datetime.__new__(cls, *args, **kwargs)


    def minutes_of_year(self):

        return self.seconds_of_year() // 60


    def hours_of_year(self):

        return self.minutes_of_year() // 60


    def seconds_of_year(self):

        dt0 = datetime.datetime(self.year, 1, 1, tzinfo=self.tzinfo)

        delta = self-dt0

        return int(delta.total_seconds())


# create and use like a normal datetime object

dt = MyDateTime.now()

# properties and functions of datetime still available, of course.

print(dt.day)

# ... and new methods:

print(dt.hours_of_year())


查看完整回答
反對 回復 2023-06-20
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

我有一個數據框 DF,它的“時間戳”列的類型為 datetime64[ns]。

列時間戳如下所示:


DF['Timestamp']:

0      2022-01-01 00:00:00

1      2022-01-01 01:00:00

2      2022-01-01 02:00:00

3      2022-01-01 03:00:00

4      2022-01-01 04:00:00

...       

8755   2022-12-31 19:00:00

8756   2022-12-31 20:00:00

8757   2022-12-31 21:00:00

8758   2022-12-31 22:00:00

8759   2022-12-31 23:00:00

Name: Timestamp, Length: 8760, dtype: datetime64[ns]

我以這種方式提取“一年中的小時”:


DF['Year']       = DF['Timestamp'].astype('M8[Y]')

DF['DayOfYear']  = (DF['Timestamp'] - DF['Year']).astype('timedelta64[D]')

DF['Hour']       = DF['Timestamp'].dt.hour + 1 

DF['HourOfYear'] = DF['DayOfYear'] * 24 + DF['Hour']

首先,它從時間戳中提取年份。

接下來,它根據天數(換句話說,一年中的某一天)創建從年初到該時間戳的時間增量。

然后它從時間戳中提取小時。

最后,它使用該公式計算一年中的小時。


最后看起來像這樣:


DF:

               Timestamp  ...  HourOfYear

0    2022-01-01 00:00:00  ...  1.0

1    2022-01-01 01:00:00  ...  2.0

2    2022-01-01 02:00:00  ...  3.0

3    2022-01-01 03:00:00  ...  4.0

4    2022-01-01 04:00:00  ...  5.0

...      

8755 2022-12-31 19:00:00  ...  8756.0

8756 2022-12-31 20:00:00  ...  8757.0

8757 2022-12-31 21:00:00  ...  8758.0

8758 2022-12-31 22:00:00  ...  8759.0

8759 2022-12-31 23:00:00  ...  8760.0

[8760 rows x 6columns]


查看完整回答
反對 回復 2023-06-20
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

你可以寫一個自定義函數


def get_time_of_year(dt, type = 'hours_of_year'):

  intitial_date = datetime(dt.year, 1,1, 00, 00, 00) 

  duration = dt - intitial_date


  days, seconds = duration.days, duration.seconds

  hours = days * 24 + seconds // 3600

  minutes = (seconds % 3600) // 60


  if type == 'hours_of_year':

    return hours

  if type == 'days_of_year':

    return days

  if type == 'seconds_of_year':

    return seconds

  if type == 'minuts_of_year':

    return minutes

測試功能


get_time_of_year(dt, 'hours_of_year')

#>>48


查看完整回答
反對 回復 2023-06-20
  • 5 回答
  • 0 關注
  • 241 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號