将纪元时间截断为小时/天的开始
truncate epoch time to start of hour / day
我想将纪元时间(以毫秒为单位)截断为小时的开始或一天的开始。我创建了以下功能,它们工作正常。我现在正在执行 3 个步骤 - 将 input_epoch 转换为日期时间 -> 截断日期时间 -> 将日期时间转换回 epoch_time。有没有办法直接截断纪元时间(不将其转换为 datetime 对象)?
有什么建议吗?
from datetime import datetime
def to_epoch_millis(dt):
return int((dt - datetime.utcfromtimestamp(0)).total_seconds() * 1000.0)
def truncate_to_hour(dt):
return dt.replace(microsecond=0, second=0, minute=0)
def truncate_to_day(dt):
return dt.replace(microsecond=0, second=0, minute=0, hour=0)
# input - 1647548963623 - Thu Mar 17 2022 20:29:23
input_epoch = 1647548963623
print(to_epoch_millis(
truncate_to_day(datetime.utcfromtimestamp(input_epoch / 1000)))) # 1647475200000 - Thu Mar 17 2022 00:00:00
print(to_epoch_millis(
truncate_to_hour(datetime.utcfromtimestamp(input_epoch / 1000)))) # 1647547200000 - Thu Mar 17 2022 20:00:00
一天有 86400000 毫秒。
一小时有3600000毫秒。
找到模数并减去它,这样您将获得一天或一小时的开始时间。
您实质上是在整数除法中删除剩余的毫秒数,向下舍入。
input_epoch = 1647548963623
truncate_day_epoch = input_epoch - (input_epoch % 86400000)
truncate_hour_epoch = input_epoch - (input_epoch % 3600000)
我想将纪元时间(以毫秒为单位)截断为小时的开始或一天的开始。我创建了以下功能,它们工作正常。我现在正在执行 3 个步骤 - 将 input_epoch 转换为日期时间 -> 截断日期时间 -> 将日期时间转换回 epoch_time。有没有办法直接截断纪元时间(不将其转换为 datetime 对象)? 有什么建议吗?
from datetime import datetime
def to_epoch_millis(dt):
return int((dt - datetime.utcfromtimestamp(0)).total_seconds() * 1000.0)
def truncate_to_hour(dt):
return dt.replace(microsecond=0, second=0, minute=0)
def truncate_to_day(dt):
return dt.replace(microsecond=0, second=0, minute=0, hour=0)
# input - 1647548963623 - Thu Mar 17 2022 20:29:23
input_epoch = 1647548963623
print(to_epoch_millis(
truncate_to_day(datetime.utcfromtimestamp(input_epoch / 1000)))) # 1647475200000 - Thu Mar 17 2022 00:00:00
print(to_epoch_millis(
truncate_to_hour(datetime.utcfromtimestamp(input_epoch / 1000)))) # 1647547200000 - Thu Mar 17 2022 20:00:00
一天有 86400000 毫秒。 一小时有3600000毫秒。
找到模数并减去它,这样您将获得一天或一小时的开始时间。 您实质上是在整数除法中删除剩余的毫秒数,向下舍入。
input_epoch = 1647548963623
truncate_day_epoch = input_epoch - (input_epoch % 86400000)
truncate_hour_epoch = input_epoch - (input_epoch % 3600000)