2016-08-02 6 views
1

私の雇用主はピップを使用して第三者パッケージをインストールすることを望まず、信頼できるホストのみのパッケージを使用したいと考えています。したがって、私は今私のコードでpytzを使用することはできません。タイムゾーン内の特定の日付がDSTにあるかどうかを確認するにはどうすればよいですか?ここにpytzを使用して私の元のコードです。日付がpytzなしのタイムゾーンの夏時間であることを確認

import pytz 
    import datetime 
    ... 

    target_date = datetime.datetime.strptime(arg_date, "%Y-%m-%d") 
    time_zone = pytz.timezone('US/Eastern') 
    dst_date = time_zone.localize(target_date, is_dst=None) 
    est_hour = 24 
    if bool(dst_date.dst()) is True: 
     est_hour -= 4 
    else: 
     est_hour -= 5 
+0

あなたは米国のタイムゾーンのみを心配していますか、世界中で操作する必要がありますか? –

+0

私が懸念している唯一のタイムゾーンは、米国東部です。 – DeadCake

答えて

0

一般的に、これは複雑な問題であり、手作業では解決できません。 pytzのような、タスクに専念した人が審査しメンテナンスしている外部モジュールに依拠するのは唯一の標準です。

ただし、米国東部時間帯(特に東部)にのみ関心があるという制約がある場合、単純な機能を記述することができます。現在の(2016年)のルールは、明らかに、last changed in 2007となり、いつでも変更される可能性があります。これらの規則には、DST starts on the second Sunday in March and ends on the first Sunday in Novemberが記載されています。

このコードはmy algorithm for finding a particular day of a monthに基づいています。

def is_dst(dt): 
    if dt.year < 2007: 
     raise ValueError() 
    dst_start = datetime.datetime(dt.year, 3, 8, 2, 0) 
    dst_start += datetime.timedelta(6 - dst_start.weekday()) 
    dst_end = datetime.datetime(dt.year, 11, 1, 2, 0) 
    dst_end += datetime.timedelta(6 - dst_end.weekday()) 
    return dst_start <= dt < dst_end 
+0

これは私がpytzを使わないようにできる限り近いと思います。助けてくれてありがとう。 – DeadCake

0

pipを使用せずにpytzをインストールします。

DSTは任意の地域で法律によって選択されていますが、実際には計算することはできません。the pytz source for US/Eastern, for exampleを見てください。それは文字通りDSTが今後20年間変化するハードコードされた日付のリストです。

pytzと同じソース(ZoneInfo/[またはこのリンク](http://www.iana.org/time-zones))からデータを取り出して、自分で行うことができます。あなたのOSのtzの実装では、...

しかし、(ライセンス理由がない限り)あなたの雇用者にpytzソースを見て、それが許容できるほど無害であり、使用を認めるようにしてください。

+0

提案していただきありがとうございます。一般的にピップやパッケージマネージャを使用したくない理由は、TechOpsチームがすべての言語のパッケージマネージャを管理するには小さすぎるし、あらゆる言語のセキュリティアップデートのためにパッケージの更新に対処する必要があるためです彼らのための痛みです "。私は彼らがpipなしでpytzをインストールすることを承認するかどうか疑問に思う。うまくいけば、彼らは合理的で、使用のためにそれを承認します。 – DeadCake

関連する問題