如何使用python将本地时间(PDT)转换为PST

如何使用python将本地时间(PDT)转换为PST,python,datetime,time,timezone,Python,Datetime,Time,Timezone,通常,如果我想转换时区,我会做如下操作 # local interpreted as pst to utc utc = pytz.utc pst = pytz.timezone('America/Los_Angeles') start_time_str = time.strftime('%Y-%m-%d %H:%M:%S', \ time.localtime(start_time)) start_time_datetime = \ datetime.datetime.strptim

通常,如果我想转换时区,我会做如下操作

# local interpreted as pst to utc

utc = pytz.utc
pst = pytz.timezone('America/Los_Angeles')


start_time_str = time.strftime('%Y-%m-%d %H:%M:%S', \
  time.localtime(start_time))
start_time_datetime = \
  datetime.datetime.strptime(start_time_str, "%Y-%m-%d %H:%M:%S")

start_time_datetime = \
  start_time_datetime.replace(tzinfo=pst).astimezone(utc)
现在我想做类似的事情,比如我想把localtime转换成pst

localtime = datetime.datetime.fromtimestamp(time.mktime(
            time.localtime()))
我不确定你是如何做到这一点的

任何帮助都将不胜感激

两件事:

  • “美国/洛杉矶”
    标识符代表整个太平洋时区,包括太平洋标准时间和太平洋标准时间。它将使用-8或-7作为时区偏移量,具体取决于使用它的具体日期和时间

  • 调用
    replace(tzinfo=…)
    是一个错误。改用
    本地化
    。看见这将在引言和第一个示例中讨论

  • 两件事:

  • “美国/洛杉矶”
    标识符代表整个太平洋时区,包括太平洋标准时间和太平洋标准时间。它将使用-8或-7作为时区偏移量,具体取决于使用它的具体日期和时间

  • 调用
    replace(tzinfo=…)
    是一个错误。改用
    本地化
    。看见这将在引言和第一个示例中讨论


  • 您的代码包含不必要的(在
    strftime
    之后调用
    strftime
    )或错误的(
    .replace()
    )转换

    要创建一个有意识的datetime对象,给定“从历元开始的秒数”
    start\u time
    (由
    time.time()返回的值)

    “美国/洛杉矶”
    时区id根据日期使用PST或PDT tzname生成时间。不需要转换

    问题中的最后一个代码示例包含不必要的转换,在某些情况下可能会失败。如果目的是将本地时区中的当前时间作为aware datetime对象获取,则可以使用:


    您的代码包含不必要的(在
    strftime
    之后调用
    strftime
    )或错误的(
    .replace()
    )转换

    要创建一个有意识的datetime对象,给定“从历元开始的秒数”
    start\u time
    (由
    time.time()返回的值)

    “美国/洛杉矶”
    时区id根据日期使用PST或PDT tzname生成时间。不需要转换

    问题中的最后一个代码示例包含不必要的转换,在某些情况下可能会失败。如果目的是将本地时区中的当前时间作为aware datetime对象获取,则可以使用:


    首先,值得注意的是,当地时间要么是标准时间,要么是夏令时——两者不能同时存在。我相信你真正想问的是,是否有办法判断某个时间是不是夏令时。换句话说,给定特定的一天,特定的时间是夏令时吗?另一个常见用例是将固定在特定时间偏移处的表格数据转换为当前正确时间

    好的,我可以想出三种方法

    (1) 您可以将
    datetime
    转换为
    time
    对象,并查看
    .tm\u isdst
    属性。您可以对其进行测试,查看该属性是否等于1,然后减去一小时的
    timedelta

    >>> time.localtime()
    time.struct_time(tm_year=2019, tm_mon=11, tm_mday=16, tm_hour=12, 
    tm_min=36, tm_sec=32, tm_wday=5, tm_yday=320, tm_isdst=0)
    >>> time.localtime().tm_isdst
    0
    
    (2) 第二种方法是在每月15日的中午逐月爬网,检查偏移量是否变化。(请注意,某些区域不实施DST。)较大的值表示提前跳过夏令时。(例如,PDT是UTC-7,而PST是UTC-8。)从这些值可以计算时间差。然后,您可以通过检查偏移量来测试时间,看看它是在标准时间还是夏令时。按以下方式检查报价:

    >>> my_special_pdt_datetime.strftime('%z') 
    '-0700'
    
    (3) 也许最简单的方法是通过获取
    offset=datetime.datetime.utcnow()-datetime.datetime.now()
    并将其与pytz的已知偏移量进行比较来计算现有偏移量:

    >>> pytz.timezone('US/Pacific').localize(datetime.datetime(2019,1,1)).strftime('%z')
    '-0800'
    

    首先,值得注意的是,当地时间要么是标准时间,要么是夏令时——两者不能同时存在。我相信你真正想问的是,是否有办法判断某个时间是不是夏令时。换句话说,给定特定的一天,特定的时间是夏令时吗?另一个常见用例是将固定在特定时间偏移处的表格数据转换为当前正确时间

    好的,我可以想出三种方法

    (1) 您可以将
    datetime
    转换为
    time
    对象,并查看
    .tm\u isdst
    属性。您可以对其进行测试,查看该属性是否等于1,然后减去一小时的
    timedelta

    >>> time.localtime()
    time.struct_time(tm_year=2019, tm_mon=11, tm_mday=16, tm_hour=12, 
    tm_min=36, tm_sec=32, tm_wday=5, tm_yday=320, tm_isdst=0)
    >>> time.localtime().tm_isdst
    0
    
    (2) 第二种方法是在每月15日的中午逐月爬网,检查偏移量是否变化。(请注意,某些区域不实施DST。)较大的值表示提前跳过夏令时。(例如,PDT是UTC-7,而PST是UTC-8。)从这些值可以计算时间差。然后,您可以通过检查偏移量来测试时间,看看它是在标准时间还是夏令时。按以下方式检查报价:

    >>> my_special_pdt_datetime.strftime('%z') 
    '-0700'
    
    (3) 也许最简单的方法是通过获取
    offset=datetime.datetime.utcnow()-datetime.datetime.now()
    并将其与pytz的已知偏移量进行比较来计算现有偏移量:

    >>> pytz.timezone('US/Pacific').localize(datetime.datetime(2019,1,1)).strftime('%z')
    '-0800'
    

    与您的输入类似?这是Unix时间
    开始时间
    (一个数字)?为什么调用strftime()
    只是为了立即调用strftime()
    (相反的转换)?
    localtime
    计算的目的是什么(您是否知道
    datetime.now()
    )?与您的输入类似?这是Unix时间
    开始时间
    (一个数字)?为什么调用strftime()
    只是为了立即调用strftime()
    (相反的转换)?
    localtime
    计算的目的是什么(您知道