![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
フォーマットが異なる二つの日時、 "Tue Aug 4 11:10:14 PDT 2015” と "Tue, 04 Aug 2015 11:10:14 -0700” を Unix Epoch に変換する必要があります。以下のテストプログラムではどちらの時刻フォーマットからも同じ Epoch を得ることができました。
# cat time.py
# -*- coding: utf-8 -*-
import time
import datetime
import dateutil.parser
d = "Tue Aug 4 11:10:14 PDT 2015"
d = dateutil.parser.parse(d)
print int(time.mktime(d.timetuple()))
e = "Tue, 04 Aug 2015 11:10:14 -0700"
e = dateutil.parser.parse(e)
print int(time.mktime(d.timetuple()))
# python time.py
1438683014
1438683014
同テストプログラムをメインのプログラムに組み込んで、後者のフォーマットの時刻を Epoch に変換すると、異なる Epoch が返ってきます。
def datetime_to_epoch(self, d):
d = dateutil.parser.parse(d)
return int(time.mktime(d.timetuple()))
ihTime = xmlRoot.find(".//g_date").text
logger.debug("g_date:'%s'", ihTime)
# Convert this format "Tue, 04 Aug 2015 11:10:14 -0700" to Unix epoch
ihTime = self.datetime_to_epoch(ihTime)
self.qDate.append(ihTime)
logger.debug("Appending generated time: %s", ihTime)
実行結果
# python test.py
...
generation_date:'Tue, 04 Aug 2015 11:10:14 -0700'
Appending generated time: 1438686614
xml から取得している文字列が想定と異なっているのかと疑い、下記のように
ihTime に直接後者の時刻を入れてみたのですが結果は変わりませんでした。
ihTime に想定外の値が入っているという事では無いようです。
ihTime = xmlRoot.find(".//g_date").text
logger.debug("g_date:'%s'", ihTime)
# Convert this format "Tue, 04 Aug 2015 11:10:14 -0700" to Unix epoch
ihTime = "Tue, 04 Aug 2015 11:10:14 -0700”
ihTime = self.datetime_to_epoch(ihTime)
self.qDate.append(ihTime)
logger.debug("Appending generated time: %s", ihTime)
得られた Epoch
1438686614
同様の方法で前者のフォーマットデータを直接 ihTime に入れて実行すると、
最初の time.py と同じ結果が得られます。
ihTime = xmlRoot.find(".//g_date").text
logger.debug("g_date:'%s'", ihTime)
# Convert this format "Tue, 04 Aug 2015 11:10:14 -0700" to Unix epoch
ihTime = "Tue Aug 4 11:10:14 PDT 2015”
ihTime = self.datetime_to_epoch(ihTime)
self.qDate.append(ihTime)
logger.debug("Appending generated time: %s", ihTime)
得られた Epoch
1438683014
二つの Epoch を再変換してみると、後者のメインプログラム&フォーマットで得られる Epoch は1時間時刻が進んでいるようです。
~# date --date "@1438683014"
Tue Aug 4 11:10:14 BST 2015
~# date --date "@1438686614"
Tue Aug 4 12:10:14 BST 2015
メインプログラムで後者のフォーマットの時刻を与えた場合のみ結果が異なる点について、
確認すべきことがありましたらご指摘いただけないでしょうか。
もし dateutil の使い方自体が間違っている様でしたら適切な Epoch への変換方法を教えていただけると嬉しいです。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
e = "Tue, 04 Aug 2015 11:10:14 -0700"
e = dateutil.parser.parse(e)
print int(time.mktime(d.timetuple()))
本当にこの通りなら、2つ目は e のepochにはなっていません。
お返事ありがとうございました。ご指摘ありがとうございます、test.py では期待する動作が得られていると勘違いしていました。。。結果、メインプログラム側に何か問題があるのだろうと思い込んでしまっていました。
ご指摘をいただいたあと、dateutil を調べて以下の様にすることで PDT や -0700 を無視した epoch を得る事ができました。
d = dateutil.parser.parse(d, ignoretz=True)
No.2
- 回答日時:
最初のロジックの結果が同じになったのは思い込みです。
(ロジックが間違ってます)-0700とPDTは同じUTC-7ですが、最後のdateコマンドの出力結果がBST(UTC+1)なことから、-0700と指定した場合とPDT(タイムゾーン)を指定した場合で動作が異なるように思えます。というか-0700という記述のしかたは可能?UTC-7と記述してみては?
![「python : unix epoch 」の回答画像2](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/7/542258155_560dbc92a4d94/M.png)
お返事ありがとうございました。
ご指摘のとおりテストプログラム自体が誤っていて、その誤った結果をもとにメインプログラム側を疑ってしまっていました。。
大変丁寧な回答をいただいたのに恐縮ですが、問題解決のきっかけになった最初の方に BA をつけさせていただきました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Outlook(アウトルック) 休みが明けてメールをみたらやばいです 3 2022/08/17 09:03
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- PHP 共通の処理をまとめる方法がわからないのでアドバイスお願いします。 1 2022/12/19 20:20
- その他(プログラミング・Web制作) pythonをjupiter notebookからmecabで頻出の高い単語の抽出について(Runt 1 2022/12/17 18:08
- 英語 to date 2 2023/05/23 23:22
- その他(プログラミング・Web制作) pythonのpandasのcsvの外部結合(outer_join)した際に列が想定とは異なる事象 1 2022/05/25 13:23
- 英語 「名詞+形容詞/現在分詞/過去分詞+to不定詞の副詞的用法」の語順について 7 2022/09/22 05:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル名に日付の挿入
-
開始と終了を指定して、その間...
-
PHPで以下のような占いプログラ...
-
第何週かを取得したい
-
MYSQLの日付から現在までの年数...
-
strtotime 前月・前々月の表示
-
プルダウンからの日付取得処理
-
日付の比較方法
-
今月と来月のカレンダーの処理...
-
php カレンダーの休み表示
-
C言語を使って、ある特定の日の...
-
MySQLのdate型をphpで○年○月○日...
-
今日の日付から1週間のリスト
-
DBから昨日以前の日付のデータ...
-
PHP でyyyy/mm/dd形式の文字列...
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
DTOとEntityの差は何ですか。
-
「取得先」という表現について
-
excel access連携 このテーブル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
開始と終了を指定して、その間...
-
ファイル名に日付の挿入
-
昨日の日付を取得するVBscript
-
PHP 指定した期間だけ表示した...
-
Accessで、DAOでAddnew
-
C言語を使って、ある特定の日の...
-
codeigniterの時間設定
-
日付計算について
-
昨日の日付名でファイルを作成...
-
差分の月数を算出する方法
-
現在時刻をyyyymmddhhmmss形式...
-
substrの使い方について教えて...
-
1ヶ月後の日付を出力したい
-
C言語でシステム日付との差を...
-
経過期間計算がうまくいかない
-
アップロードしたファイル名に...
-
今日の日付から1週間のリスト
-
6ヶ月前の日付を取得するにはど...
-
strtotime 日付の変換
-
PHPでmysqlを使ってます。日時...
おすすめ情報