HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0928
シンバルUNIXタイムスタンプの取得2解決


シンバル

リンク

2020/9/28(Mon) 06:52:05|NO.91464

UNIXタイムスタンプの取得を行うにはどうしたらいいでしょうか?
検索してみたところ1件がヒットしましたが、
http://quasiquote.org/hspwiki/HSP3%e3%81%ab%e8%bf%bd%e5%8a%a0%e3%81%97%e3%81%a6%e6%ac%b2%e3%81%97%e3%81%84%e6%a9%9f%e8%83%bd%e3%81%ae%e3%83%aa%e3%82%b9%e3%83%88#H-17pehl0
別の命令を作った方がいいかもとされ、手法には一切触れていないので困っています。



この記事に返信する


沢渡

リンク

2020/9/28(Mon) 12:05:27|NO.91468

(すみません、コードちょっとだけ修正して再投稿です)
こんな感じだとどうでしょうか?
修正ユリウス日を利用して1970年1月1日からの日数を求めています。

//・time2ut(年,月,日,時,分,秒) 指定した日時をUNIXタイムスタンプに変換 //・now_ut 現在のUNIXタイムスタンプを取得 //・ut2time v1,v2,v3,v4,v5,v6,UNIXタイム v1〜v6には変数を指定。UNIXタイムから年・月・日・時・分・秒を求める #module #define global now_ut time2ut(gettime(0),gettime(1),gettime(3),gettime(4),gettime(5),gettime(6)) #defcfunc time2ut int _y,int _m,int d,int _h,int _mi,int _s y=_y m=_m-2 if m<=0 : m+=12 : y-- days=365*y + y/4 + y/400 - y/100 + 30*m+59*m/100 + d - 678912 - 40587 //↑指定した日の修正ユリウス日をフリーゲルの公式から求め、 //さらに1970年1月1日の修正ユリウス日である40587を引く。 h=_h-9 //指定した時から日本とUTCの時差である9を引く。 mi=_mi-0 //日本に関して言えば、分の修正はなし。 s=_s+0 //閏秒を考慮しない場合。考慮する場合は↓のコメントアウトを外す。 //s=_s+37 return days*86400 + h*3600 + mi*60 + s #deffunc ut2time var ry,var rm,var rd,var rh,var rmi,var rs,int _ut ut=_ut-0 //閏秒を考慮しない場合。考慮する場合は↓のコメントアウトを外す。 //ut=_ut-37 add_h=9 //日本とUTCとの時差 add_m=0 //日本とUTCとの時差(分) ut+=add_h*3600+add_m*60 days=ut/86400 : a=ut\86400 rh=a/3600 : a\=3600 rmi=a/60 : rs=a\60 // n=(days+40587)+678881 //(days+40587)で修正ユリウス日に変換。以下、フリーゲルの公式で日付を求める。 a=3+4*((4*(n+1)/146097+1)*3/4+n) b=(a\1461)/4*5+2 ry=a/1461 rm=b/153+3 rd=(b\153)/5+1 if rm>=13 : rm-=12 : ry++ return #global x=now_ut mes x ut2time y,m,d,h,mi,s,x mes strf("%04d-%02d-%02d %02d:%02d:%02d",y,m,d,h,mi,s)



シンバル

リンク

2020/9/28(Mon) 15:42:57|NO.91470

閏秒の考慮までついていて素晴らしいです。ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.