質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

4回答

2942閲覧

[Python]UNIX時間(エポックミリ秒)からUNIX時間(エポック日付)を求めたいです

cray123

総合スコア47

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/03/20 01:05

編集2019/03/20 01:47

pythonで1546272061(2019/01/01 01:01:01)から1546268400(2019/01/01)を求める方法はないでしょうか
datetimeライブラリなどで日付形式(yyyymmddHHMMSSS)などに変換すると簡単だと思うのですが変換無しでやりたいです。

よろしくお願いします。

###追記
説明不足でした。申し訳ありません

①エポック秒(ミリ)
1546272061

②エポック日付(多分造語です)
1546268400

となります

上記のような①エポック秒から②日付だけのエポックに変換したいということです
また、①のエポック秒は変数であり特定の値ではないので経過時間を引くというのは出来ません。

説明になっているでしょうか..
よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/03/20 01:39

「エポック日付」とは?? 「日付」の間違いでは?
t_obara

2019/03/20 03:25

ちなみに、エポック秒とはどのようなものかご理解されているのでしょうか?既回答のコメントをみて、もしかしてご理解されていないのではと思ったもので。
cray123

2019/03/20 04:03

1970/1/1からの経過時間と認識しております
t_obara

2019/03/20 04:25

であれば、既に多くの回答が提示されている通り、単に数値計算でできることもわかると思いますし、「経過時間を引く」といった疑問(なぜそのような認識を持ったのかもわかりませんが)は出てこないように思うのですが。
cray123

2019/03/20 04:29

すみません、解決しました 私の日付を見るときに使っていたpythonの環境とツールがJSTに変換されるものだったので混乱していました 回答してくださった皆様、お手数おかけしました ありがとうございます
guest

回答4

0

JST(UTC+0900)という前提で。

plain

1>>> (1546272061 + 9*3600) // (24*3600) * 24*3600 - 9*3600 21546246800

適宜定数は置き換えてもらえれば。


(追記)
足し算引き算が逆だったようで修正しました。

投稿2019/03/20 01:20

編集2019/03/20 01:30
quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cray123

2019/03/20 01:35 編集

ご回答有り難うございます 私の環境(CentOS7.6対話型 Python3.7)で実行したところ`1546239661`となりました また、説明不足で申し訳ないのですが、特定のエポック秒からエポック日付を出力したいというわけではないので経過時間はわからない前提となっています  JSTではなくUTCで大丈夫です 紛らわしくてすみません
quickquip

2019/03/20 02:42

> `1546239661`となりました この計算式で下2桁が00にならないなんてありえません。 整数値×24×3600 - 9×3600 ですよ? > JSTではなくUTCで大丈夫です 「大丈夫です」の意味が分かりません。 1546272061はUTCだと2018年12月31日16:01:01 なので質問の前提が崩れますよね。
cray123

2019/03/20 04:05

もう一度確認しましたが、使用していたツールが裏でJSTとして計算していたようです 大変失礼いたしました
guest

0

JSTではなくUTCで大丈夫です

なら、1日の秒数(86400秒)で切り捨ててしまえばいいでしょう。

python

1unixtime = 1546272061 2(unixtime // 86400) * 86400

投稿2019/03/20 02:21

編集2019/03/20 02:22
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

与えられる時刻がUnix時間 (協定世界時の1900年1月1日00:00:00から起算した閏秒を含まない秒数) であるとします。

協定世界時 (UTC) での日付

python

1unixtime // 86400 * 86400

日本標準時 (JST。UTC+09:00:00) での日付

python

1(unixtime + 9 * 3600) // 86400 * 86400

ご質問の例は、与えられた時刻を「Unix時間 + JSTとの時差」の値として計算しているようにも見えます。


追記。quiquiさんのご回答のようにも考えられますね。

python

1(unixtime + 9 * 3600) // 86400 * 86400 - 9 * 3600

は、「Unix時間による、日本標準時での日初の時刻」ですね。


追記。ご質問の「エポック秒(ミリ)」というのがUnix時間のことであれば、回答は以上に書いてきたようになるとおもいます。「Unix時間 + JSTとの時差 (9時間)」の意味であるとすれば、上の回答の「unixtime」を「unixtime - 9 * 3600」に置き換えればいいと思います。

投稿2019/03/20 01:37

編集2019/03/20 02:11
ikedas

総合スコア4315

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cray123

2019/03/20 02:03

ご回答有り難うございます 申し訳ありません。私の説明不足でした 質問文の追記をしたので差し支えなければ見ていただけるとうれしいです
guest

0

まず、例示されているのはエポックミリ秒ではなくエポック秒です。
何故変換なしでやりたいのかは分かりませんが、単純に経過秒分数値を足しているだけですので
該当秒数分引き算すれば良いと思います。

2019/01/01 01:01:01は2019/01/01 00:00:00から1時間1分1秒経過してますので
1*60*60 + 1*60 + 1 = 3661なので
該当エポック秒(1546272061)から3661引けば求めるエポック秒が算出できます。

四角い車輪の再発明ではないかと思いますが。

投稿2019/03/20 01:19

ozwind918

総合スコア1140

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cray123

2019/03/20 01:32

ご回答有り難うございます 説明不足で申し訳ないのですが、 >>2019/01/01 01:01:01は2019/01/01 00:00:00から1時間1分1秒経過してますので 特定のエポック秒からエポック日付を出力したいというわけではないので経過時間はわからない前提となっています エポック秒(変数)→エポック日付(変数) 紛らわしくてすみません よろしくお願いします。
y_waiwai

2019/03/20 01:39

説明不足なら質問編集して追記しましょう
cray123

2019/03/20 01:53

失礼しました。追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問