日期时间模块在 vps 上无法正常工作

问题描述 投票:0回答:1

我的代码在本地机器上正常工作:

def convert_timestamp(timestamp):
    formats = ['%a, %d %b %Y %H:%M:%S %Z',
            '%a, %d %b %Y %H:%M:%S %z',
        '%a, %d %b %Y %H:%M:%S EST',
        '%Y-%m-%dT%H:%M:%S.%fZ']
    for fmt in formats:
        try:
            dt = datetime.strptime(timestamp, fmt)
            break
        except ValueError:
            pass
    utc_dt = dt.astimezone(pytz.UTC)
    return str(utc_dt.strftime('%Y-%m-%d %H:%M:%S'))

此代码用于将我的日期格式转换为 UTC 格式。例如,此格式将按我的预期进行转换:

"Thu, 01 Nov 2018 16:50:27 EDT"

输出将是:

2018-11-01 20:50:27

但是当我在我的

vps
上运行此代码时,我收到此错误:

time data 'Thu, 01 Nov 2018 16:50:27 EDT' does not match format ...

我该怎么办?

python datetime converters pytz
1个回答
0
投票

我在代码中添加了

print()
,它显示
%Z
不解析
EDT
也不解析
EST

所以你必须添加
%a, %d %b %Y %H:%M:%S EDT'


我用来测试它的完整代码:

from datetime import datetime

def convert_timestamp(timestamp):
    print(timestamp)
    
    formats = ['%a, %d %b %Y %H:%M:%S %Z',
               '%a, %d %b %Y %H:%M:%S %z',
               '%a, %d %b %Y %H:%M:%S EST',
               '%Y-%m-%dT%H:%M:%S.%fZ']
               
    for fmt in formats:
        try:
            dt = datetime.strptime(timestamp, fmt)
            print('     OK:', fmt)
            break
        except ValueError:
            print('  error:', fmt)
            pass
            
    utc_dt = dt.astimezone(pytz.UTC)
    
    return str(utc_dt.strftime('%Y-%m-%d %H:%M:%S'))

# --- test ---

examples = [
    "Thu, 01 Nov 2018 16:50:27 EDT", 
    "Thu, 01 Nov 2018 16:50:27 EST", 
    "Thu, 01 Nov 2018 16:50:27 UTC",
    "Thu, 01 Nov 2018 16:50:27 -0400",  # EDT
    "Thu, 01 Nov 2018 16:50:27 -0500",  # EST
]

for item in examples:
    try:
        convert_timestamp(item)    
    except:
        pass

结果:

Thu, 01 Nov 2018 16:50:27 EDT
  error: %a, %d %b %Y %H:%M:%S %Z
  error: %a, %d %b %Y %H:%M:%S %z
  error: %a, %d %b %Y %H:%M:%S EST
  error: %Y-%m-%dT%H:%M:%S.%fZ
Thu, 01 Nov 2018 16:50:27 EST
  error: %a, %d %b %Y %H:%M:%S %Z
  error: %a, %d %b %Y %H:%M:%S %z
     OK: %a, %d %b %Y %H:%M:%S EST
Thu, 01 Nov 2018 16:50:27 UTC
     OK: %a, %d %b %Y %H:%M:%S %Z
Thu, 01 Nov 2018 16:50:27 -0400
  error: %a, %d %b %Y %H:%M:%S %Z
     OK: %a, %d %b %Y %H:%M:%S %z
Thu, 01 Nov 2018 16:50:27 -0500
  error: %a, %d %b %Y %H:%M:%S %Z
     OK: %a, %d %b %Y %H:%M:%S %z
© www.soinside.com 2019 - 2024. All rights reserved.