为了账号安全,请及时绑定邮箱和手机立即绑定

Python 和 Django 时区格式的问题

Python 和 Django 时区格式的问题

四季花海 2023-10-18 16:34:47
我最近在我的settings.py USE_TZ = TrueDjango 项目中添加了让 Celery 工作的命令,现在在使用该datetime.strptime命令的其他视图中,它添加了 ,-04:00因为我的时区是America/New_York。我不需要该字段的时区。如何从中删除时区?下面是我的代码。new_event.start = datetime.strptime(str(obj.start_date) ,"%Y-%m-%d %H:%M:%S")  new_event.end = datetime.strptime(str(obj.end_date) ,"%Y-%m-%d %H:%M:%S")
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

假设变量中my_time_1存储的时间与X_var您希望的时间有一定的小时差。


您可以通过执行以下操作“手动”取消增量:


X_var = -4 # In your case the delta is equal to -4


from datetime import timedelta    

my_time_1 = my_time_1 + timedelta(hours=X_var)

但是,这不是很干净,也许您应该将根据前一个时区表示的时间转换为根据后一个时区表示的时间。


您可以使用这个自定义函数:


# I copied it from some SO question but can't find which one


import pytz, datetime    


def convert_datetime_timezone(date_and_time_input, tz1, tz2):

    tz1 = pytz.timezone(tz1)

    tz2 = pytz.timezone(tz2)


    dt = datetime.datetime.strptime(date_and_time_input,"%Y-%m-%d %H:%M:%S")

    dt = tz1.localize(dt)

    dt = dt.astimezone(tz2)

    dt = dt.strftime("%Y-%m-%d %H:%M:%S")


    return dt

因此,要从my_time_1America/New_York 切换回 UTC,您可以使用:


my_time_1 = convert_datetime_timezone(my_time_1, America/New_York, UTC)

您应该采取什么措施来解决您的问题:


代替:


new_event.start = datetime.strptime(str(obj.start_date) ,"%Y-%m-%d %H:%M:%S") 

new_event.end = datetime.strptime(str(obj.end_date) ,"%Y-%m-%d %H:%M:%S")

和:


import pytz, datetime    


def convert_datetime_timezone(date_and_time_input, tz1, tz2):

    tz1 = pytz.timezone(tz1)

    tz2 = pytz.timezone(tz2)


    dt = datetime.datetime.strptime(date_and_time_input,"%Y-%m-%d %H:%M:%S")

    dt = tz1.localize(dt)

    dt = dt.astimezone(tz2)

    dt = dt.strftime("%Y-%m-%d %H:%M:%S")


    return dt


adjusted_start_date = convert_datetime_timezone(obj.start_date, America/New_York, UTC)

adjusted_end_date = convert_datetime_timezone(obj.end_date, America/New_York, UTC)


new_event.start = datetime.strptime(str(adjusted_start_date) ,"%Y-%m-%d %H:%M:%S") 

new_event.end = datetime.strptime(str(adjusted_end_date) ,"%Y-%m-%d %H:%M:%S")


查看完整回答
反对 回复 2023-10-18
  • 1 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信