标签: python-datetime

如何循环一个函数以每 15 分钟执行一次任务(在 0/15/30/45 分钟标记上)?

我有一个在 Raspberry Pi 上运行的程序,我想每 15 分钟在整点的 0、15、30 和 45 分钟从温度计中提取一些数据。

我已经使用 while 循环尝试过此操作,之前我有效地使用了 time.sleep(900),但有时会偏离整点后的 0、15、30 和 45 分钟。

目前我有这个;

from datetime import datetime

def run(condition):
    while condition == True:
        if (datetime.now().minute == (0 or 15 or 30 or 45)):
            #perform some task
        temperature_store()
Run Code Online (Sandbox Code Playgroud)

为简单起见,我没有深入了解Temperature_store() 的作用,但它从插入 Pi 的传感器读取温度,然后将其打印出来。

我希望Temperature_store() 每 15 分钟发生一次,但目前,它每秒发生一次。

我知道这可能是因为我的 while 循环的逻辑/语法错误,但我无法弄清楚。(对python脚本没有太多经验,耽误时间)。

python time while-loop python-datetime raspberry-pi

5
推荐指数
1
解决办法
1万
查看次数

Pandas `.to_pydatetime()` 在 DataFrame 中不起作用

我有这样的字符串'03-21-2019',我想转换为本地 Python 日期时间对象:即datetime.datetime类型。转换很容易通过pandas

import pandas as pd
import datetime as dt

date_str = '03-21-2019'
pd_Timestamp = pd.to_datetime(date_str)
py_datetime_object = pd_Timestamp.to_pydatetime()
print(type(py_datetime_object))
Run Code Online (Sandbox Code Playgroud)

结果

<class 'datetime.datetime'>
Run Code Online (Sandbox Code Playgroud)

这正是我想要的,因为我想timedelta通过从另一个中减去其中一个来计算's - 在本机 Pythondatetime.datetime类中完美定义。但是,我的数据在pd.DataFrame. 当我尝试以下代码时:

import pandas as pd
import datetime as dt

df = pd.DataFrame(columns=['Date'])
df.loc[0] = ['03-21-2019']
df['Date'] = df['Date'].apply(lambda x:
                              pd.to_datetime(x).to_pydatetime())
print(type(df['Date'].iloc[0]))
Run Code Online (Sandbox Code Playgroud)

结果是

<class 'pandas._libs.tslibs.timestamps.Timestamp'>
Run Code Online (Sandbox Code Playgroud)

这是错误的类型,我一生都无法弄清楚为什么只有一部分lambda表达式被评估(即字符串到熊猫时间戳),而不是最后一部分(即熊猫-时间戳到日期时间。日期时间)。如果我显式定义函数,而不是使用lambda表达式,它也不起作用:

import pandas as pd
import datetime as dt


def …
Run Code Online (Sandbox Code Playgroud)

python-3.x python-datetime pandas

5
推荐指数
2
解决办法
2862
查看次数

特定格式 Python 中的当前日期时间

我是 python 的初学者,我有一个函数需要以类似于此的格式显示当前日期、时间、月份、年份。

Mon Jun 22 14:00:03 UTC 2020
Run Code Online (Sandbox Code Playgroud)

我看到了预定义的日期时间类,但我不确定如何利用此类来导出这种格式(UTC)的当前日期。

任何帮助深表感谢。提前致谢。

python datetime datetime-format python-3.x python-datetime

5
推荐指数
1
解决办法
4205
查看次数

python中datetime模块的isoformat函数返回错误的偏移量

所以我有 -

timezone = pytz.timezone('Asia/Kolkata')
one_time_stamp = '2017-06-01 05:30:00'

zoned_time_stamp = datetime.datetime.strptime(one_time_stamp, '%Y-%m-%d %H:%M:%S')

#This outputs 2017-06-01 05:30:00 which is fine.
print(zoned_time_stamp)

#notice timezone added
non_iso_zoned_ts = zoned_time_stamp.replace(microsecond=0, tzinfo=timezone)
# This outputs 2017-06-01 05:30:00 which is fine.
print(zoned_time_stamp)

iso_date = non_iso_zoned_ts.isoformat()
#This outputs 2017-06-01T05:30:00+05:53 which is incorrect. Ideally it should be 2017-06-01T05:30:00+05:30
print(iso_date)
Run Code Online (Sandbox Code Playgroud)

现在我想知道为什么 isoformat 添加了 05:53 的偏移量,而亚洲/加尔各答时区是 +05:30。参考 - https://www.zeitverschiebung.net/en/timezone/asia--kolkata

python pytz python-datetime

5
推荐指数
1
解决办法
226
查看次数

如何使用pandas获取两个日期之间的天数

我正在尝试使用以下函数获取两个日期之间的天数

df['date'] = pd.to_datetime(df.date)

# Creating a function that returns the number of days
def calculate_days(date):
    today = pd.Timestamp('today')
    return today - date

# Apply the function to the column date
df['days'] = df['date'].apply(lambda x: calculate_days(x))
Run Code Online (Sandbox Code Playgroud)

结果看起来像这样

153 天 10:16:46.294037

但我想让它说153。我该如何处理这个问题?

python datetime python-datetime pandas

5
推荐指数
1
解决办法
1万
查看次数

类型错误:无法从 ndarray 中减去 DatetimeArray

我的数据框中有两列 - 开始日期和完成日期(它是时间戳)。我想通过找出差异来计算运行时间。当我运行下面的代码时,出现错误:TypeError: cannot subtract DatetimeArray from ndarray。我也无法将完成日期列拆分为日期和时间,以便我可以以另一种方式计算运行时间。

# calculate runtime 
pd.to_datetime(df.start_date)
pd.to_datetime(df.finish_date)

diff = pd.to_datetime(df.finish_date) - pd.to_datetime(df.start_date)
Run Code Online (Sandbox Code Playgroud)

数据框如下所示: df

file_name                unique_id                                      start_date                         finish_date
        
file1         1716b94a8d8d83c8fffe4bdd14d536ae1ee9cba6bf17e6...   2020-09-03T16:18:38.929863799Z          2020-09-03T16:20:17.615093582Z
        
file2         87ff84ab119b798312230fceb3a8730fe74669a373650a...   2020-09-03T16:26:25.075167073Z          2020-09-04T00:04:39.702686798Z
Run Code Online (Sandbox Code Playgroud)

我怎么能够 -

  1. 要么找到完成日期和开始日期之间的差异?
  2. 将列拆分为日期和时间。

python-datetime pandas

5
推荐指数
1
解决办法
3万
查看次数

将 datetime.datetime 对象写入文件

问题

我想将 datetime.datetime 对象写入文件,因为我的机器人整夜停机,我需要它检查从该时间点到当前消息的所有消息,但我找不到解决方案如何做到这一点。文件类型并不重要,只要我可以向其中写入 datetime.datetime 对象并可以从中读取它(但我更喜欢 JSON,因为我已经有了一个用于写入、读取的系统,...为此)。

尝试过

我尝试将其作为原始 datetime.datetime 写入 JSON 文件,并尝试将其作为原始 datetime.datetime 写入 txt 文件,但.write()两者都不起作用,因为它们不接受该类型。

当前代码

机器人关闭时:

async for message in channel.history(limit=1):
    lastmsg = message.created_at

jsonhandle.update("last_message", lastmsg, "lastmsg")
Run Code Online (Sandbox Code Playgroud)

调用方式on_ready

last_message = jsonhandle.get("last_message", "lastmsg")

    chistory = await channel.history(after=last_message).flatten()
Run Code Online (Sandbox Code Playgroud)

python datetime python-datetime discord.py

5
推荐指数
1
解决办法
4743
查看次数

使用日期逻辑创建假数据

我正在尝试将假数据插入到该表中。它不能完全随机,因为行需要有意义。下面我来解释一下。

我的数据如下所示:

帐号 帐户状态 开始日期 结束日期
C382861922 积极的 2016-05-25 没有任何
C382861922 不活动 没有任何 没有任何
C382861922 积极的 没有任何 没有任何
C382861922 不活动 没有任何 2021-12-31
C429768513 积极的 2015-12-27 没有任何
C429768513 不活动 没有任何 没有任何
C429768513 积极的 没有任何 没有任何
C429768513 不活动 没有任何 没有任何
C429768513 积极的 没有任何 没有任何
C429768513 不活动 没有任何 没有任何
C429768513 积极的 没有任何 没有任何
C429768513 不活动 没有任何 2021-12-31
C643625629 积极的 2016-07-24 没有任何
C643625629 不活动 没有任何 没有任何
C643625629 积极的 没有任何 2021-12-31
C82157435 积极的 2016-10-22 没有任何
C82157435 不活动 没有任何 2021-12-31

每个 AcctID 可以出现多次,但最容易解释我在做什么,仅举一个 AcctID 出现两次的例子:

帐号 …

python dataframe python-datetime pandas

5
推荐指数
1
解决办法
85
查看次数

Python:从 df 添加至今的周数

我如何将两个 df 列添加在一起(日期+周):

这对我有用:

df['Date'] = pd.to_datetime(startDate, format='%Y-%m-%d') + datetime.timedelta(weeks = 3)

但是,当我尝试从列中添加周时,出现类型错误:timedelta 周组件不支持的类型:系列

df['Date'] = pd.to_datetime(startDate, format='%Y-%m-%d') + datetime.timedelta(weeks = df['Duration (weeks)'])

希望有任何帮助谢谢!

python dataframe python-datetime

5
推荐指数
1
解决办法
1543
查看次数

Python 循环从开始时间开始 n 分钟后运行

我正在尝试创建一个 while 循环,它将在 2 个时间对象之间迭代,while datetime.datetime.now().time() <= datetime.datetime.now() +relativedelta(hour=1):但每隔 n 分钟或秒间隔一次。因此,如果开始时间为凌晨 1:00,则下一次迭代应在凌晨 1:05 开始,其中 n 为 5 分钟。因此,迭代应该在开始时间的 5 分钟后开始,而不是从迭代结束时开始,使用 时就是这种情况sleep。您能否告知如何实现这一点?

一个可能的解决方案是从这里开始: 编写每 5 分钟执行一次的 python 脚本

import schedule 
import time 

def func():
    print("this is python")

schedule.every(5).minutes.do(func)
while True:
    schedule.run_pending()
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

这样,开始时间必须是凌晨 1 点。其次,如果程序需要运行 5 分钟 + 1,该怎么办?在这种情况下,6 分钟的间隔将不起作用。

python datetime scheduled-tasks python-datetime

5
推荐指数
1
解决办法
2776
查看次数