74514

[code]

    import datetime
    import pytz
    import dateutil.parser
    
    dt = dateutil.parser.parse('2021-03-02 06:00:00')
    print(dt)
    print(dt.tzinfo)
    print(dt.date())
    
    dt_utc = dt.astimezone(pytz.timezone('UTC'))
    print(dt_utc)
    print(dt_utc.tzinfo)
    print(dt_utc.date())
    
[/code]

を実行すると

[code]

    2021-03-02 06:00:00
    None
    2021-03-02
    2021-03-01 21:00:00+00:00
    UTC
    2021-03-01
    
[/code]

となってしまい parse はローカル時間 JST で生成されるようです  
これをUTCに変換してしまうと日付がずれてしまいます

時刻文字列のフォーマットに自由度もたせたいので strptime ではなく parse でよみたいのですが

[code]

    '2020-03-02 06:00:00'     => UTC 3/2 06:00
    '2020-03-02 06:00:00+900' => UTC 3/1 21:00
    
[/code]

という感じでタイムゾーン指定がある場合はそのタイムゾーン文字列として読み込み  
何もない場合にUTCとして読み込んで最終的に生成する datetime オブジェクトは UTC として生成したいです

dateutil.parse では実現できないでしょうか？


CC BY-SA 4.0
2021-03-02T09:12:45.080
74362
2021-03-08T07:01:34.833
question
python
dateutil.parse で指定したタイムゾーン時刻として読みたい


コメントでいただいた通り

[code]

    import datetime
    import pytz
    import dateutil.parser
    
    dt = dateutil.parser.parse('2021-03-02 06:00:00', default=dateutil.parser.parse('00:00Z'))
    print(dt)
    print(dt.tzinfo)
    print(dt.date())
    
    dt = dateutil.parser.parse('2021-03-02T06:00:00+0900', default=dateutil.parser.parse('00:00Z'))
    print(dt)
    print(dt.tzinfo)
    print(dt.date())
    
[/code]

という感じで default キーを設定するとタイムゾーン不明な場合にUTCにしてくれるようです

[code]

    2021-03-02 06:00:00+00:00
    tzutc()
    2021-03-02
    2021-03-02 06:00:00+09:00
    tzoffset(None, 32400)
    2021-03-02
    
[/code]

[code]

    .astimezone(dateutil.tz.gettz('UTC'))
    
[/code]

をつければ UTC になりますが  
DB にいれるところで変換してるので正しく tz 情報がついてるということで解決しました


CC BY-SA 4.0
2021-03-08T07:01:34.833
74514
2021-03-08T07:01:34.833
74362
answer