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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0407
gmグリニッジ標準時10解決


gm

リンク

2010/4/7(Wed) 00:50:08|NO.31831

このモジュールってフランスでもイギリスでもロシアでも
同じ結果を返しますか?
GMT+9を使ってるような気がして不安です。

すいません。コード読めないので教えてください。

http://www14.ocn.ne.jp/~setsuki/src_30/timeGMT.as



この記事に返信する


f(飲茶中)

リンク

2010/4/7(Wed) 08:42:53|NO.31832

マクロ「time」について。

現在のPC時間を取得して、getGMTを呼び出している。

#define time getGMT(gettime(0), gettime(1), gettime(3), gettime(4), gettime(5), gettime(6))

getGMTでは結果を作るために、取得したPC時間を加工している。

time += mult.3*(p3-1) //日 time += mult.4*(p4-9) //時

どう見ても日本時間を基準にして算出しています。



gm

リンク

2010/4/7(Wed) 11:42:36|NO.31838

ありがとうございました。
グリニッジ標準時はどこの国で起動させても同じ結果になるので、
グリニッジ標準時をタイムゾーンを気にしないで得る方法を考えていました。
過去ログの1970年1月1日からの秒数を取得する方法を使っても
タイムゾーンに依存する結果を得てしまいそうだし、
ユーザーにタイムゾーンを選択させる以外何かいい方法はないですか?



f(食事中)

リンク

2010/4/7(Wed) 12:23:37|NO.31839

市販されているOSですらタイムゾーンをユーザ選択させるというのに・・・。

ローカル時刻を気にせず、ただ単にGMTが欲しいだけなら手ごろなNTPのサーバを探せば良いんでね?



gm

リンク

2010/4/7(Wed) 12:46:34|NO.31841

こういったことをしたいんですけど。

http://www.atmarkit.co.jp/fdotnet/dotnettips/752getutctime/getutctime.html

なんか考え方おかしいですか?
どこの国で起動させても同じ動作させたいんですよ。
アフリカのタイムサーバーもトンガのタイムサーバーもしらないから。
タイムゾーンなんか気にしてたら大変だなぁ〜って考えたから。
下のコードは使えそうですか?逆引き辞書のとこです。
コードよめないからすいません。

http://www.rinku.zaq.ne.jp/ultimate/



通りすがり

リンク

2010/4/7(Wed) 16:18:34|NO.31843

コードが読めない…ってどういうことでしょう。

少々失礼な言い方になりますが、読めないなら読めるようにすればいいだけの話です。
HSPの命令はF1を押せば説明が出るでしょうし、
その他の分からない単語は、google先生にでも聞けば答えは返ってくるはずです。

原理はよく分かんないけど正しく動くから使わせてもらおう、
なんてことをしてると何も身につかないですよ。



f(帰り支度中)

リンク

2010/4/7(Wed) 17:41:27|NO.31844

>どこの国で起動させても同じ動作させたいんですよ。

PCの置かれている経度が分からんことにはどうにもならんだろ。
OSに設定されているタイムゾーンを基準にする手で、誤魔化すしかないな。


タイムゾーンの取得方法は、ググれ。
WindowsのAPIくらい出てくるんじゃないか。調べてないので知らんけど。



テック

リンク

2010/4/7(Wed) 21:40:43|NO.31846

WindowsAPIにGetSystemTimeという
システム時刻(世界協定時刻[UTC])を取得する関数があります。

GetSystemTime関数の定義は、下記のとおりになっております。
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // システム時刻
);

渡す引数は、SYSTEMTYME構造体のポインタです。
SYSTEMTYME構造体の定義は、下記のとおりになっております。
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
※WORDは、unsigned shortの別名。

下記が自作した確認スクリプト

// HSPから呼び出す外部DLLのファイル名を指定する #uselib "kernel32.dll" // 外部DLL呼び出し命令を登録する #func GetSystemTime "GetSystemTime" var // SYSTEMTIME構造体の内容を格納する配列変数 dim g_tagSystemTime, 4 // 配列変数の内容を2バイトずつ切り出して格納する変数 g_wDay = 0 g_wDayOfWeek = 0 g_wHour = 0 g_wMilliseconds = 0 g_wMinute = 0 g_wMonth = 0 g_wSecond = 0 g_wYear = 0 *HspMain // システム時刻(世界協定時刻[UTC])を取得する GetSystemTime g_tagSystemTime // 配列変数の内容を2バイトずつ切り出す /* g_wYear = wpeek(g_tagSystemTime.0, 0) g_wMonth = wpeek(g_tagSystemTime.0, 1) g_wDayOfWeek = wpeek(g_tagSystemTime.1, 0) g_wDay = wpeek(g_tagSystemTime.1, 1) g_wHour = wpeek(g_tagSystemTime.2, 0) g_wMinute = wpeek(g_tagSystemTime.2, 1) g_wSecond = wpeek(g_tagSystemTime.3, 0) g_wMilliseconds = wpeek(g_tagSystemTime.3, 1) */ g_wYear = wpeek(g_tagSystemTime, 0) g_wMonth = wpeek(g_tagSystemTime, 1) g_wDayOfWeek = wpeek(g_tagSystemTime, 2) g_wDay = wpeek(g_tagSystemTime, 3) g_wHour = wpeek(g_tagSystemTime, 4) g_wMinute = wpeek(g_tagSystemTime, 5) g_wSecond = wpeek(g_tagSystemTime, 6) g_wMilliseconds = wpeek(g_tagSystemTime, 7) // 変数の内容を表示する mes g_wYear mes g_wMonth mes g_wDayOfWeek mes g_wDay mes g_wHour mes g_wMinute mes g_wSecond mes g_wMilliseconds stop end

スクリプトの説明ですが、
GetSystemTime関数は、WindowsAPIなので、そのままでは、HSPでは使えません。
GetSystemTime関数は、kernel32.dllに含まれているので、
#uselib命令で、HSPから呼び出す外部DLLのファイル名を指定します。

次に、#func命令で、GetSystemTime関数を登録します。

3番目に、HSPには構造体がないので、配列で代用します。
ここで注意したいのが、SYSTEMTIME構造体には、8つの項目があるのに、
4つ要素の配列しか作ってないのかということですが、
SYSTEMTIME構造体の各項目は、unsigned short(2バイト)。
HSPのほうは、int(4バイト)。
つまり、配列の1番目に、年(wYear)と月(wMonth)が入ることになります。

最後に、各要素には、2項目ずつ入っているので、
wpeek関数で、2バイトずつ値を取得しています。

テスト結果は、
2010
1031
4
768
3
1792
7
3072

各項目と、バイト位置が対応していないようなので、
(g_wDayOfWeekに月が、g_wSecondに日が入っていると思う)
使うのであれば、各自修正してください。

>コードよめないからすいません。
通りすがりさんも、おっしゃられてますが、
スクリプトが読めないから聞くのではなく、
読めないなら読めるようにした方がいいです。

それに、私もHSPを使用しはじめてから、まだ約1ヶ月程なので
完全にHSPを理解していませんが、
HSPは、対応する機能が増えてきていますが、それでもまだまだ少ないと思います。
本格的にやるのであれば、C言語の知識は持っていたほうがいいと思います。

自分で調べる癖をつけたら、すぐに上達すると思いますので、
gmさんもがんばって下さい。



gm

リンク

2010/4/7(Wed) 23:55:08|NO.31847

>通りすがりさんも、おっしゃられてますが、
>スクリプトが読めないから聞くのではなく、
>読めないなら読めるようにした方がいいです。

そんな難しいの読めませんよ。><
おっしゃってることはわかるんですよ。
でも、モジュールの中身はプログラマは知る必要がない。
使い方さえわかればいいって思ってますのですいません。
オブジェクト指向ってそんなものでしたよね?

このモジュールがつかえそうだなぁ〜って思って読んだけど、
やっぱり不安なんですよ。 むずかしいから。.....
みなさんのご意見をうかがいました。
たぶん、使えそうみたいなので、みなさんありがとうございました。



f(布団中)

リンク

2010/4/8(Thu) 06:45:21|NO.31849

>でも、モジュールの中身はプログラマは知る必要がない。
>使い方さえわかればいいって思ってますのですいません。

ぶっちゃけ同意だが

動作が怪しいと思ったら自力で確認できるようにならん事には
基本誰も教えてくれんぞ。



Taka

リンク

2010/6/5(Sat) 21:49:59|NO.33030

遅レスですが、テックさんのスクリプトを一部変更して

g_wYear = wpeek(g_tagSystemTime, 0) g_wMonth = wpeek(g_tagSystemTime, 2) g_wDayOfWeek = wpeek(g_tagSystemTime, 4) g_wDay = wpeek(g_tagSystemTime, 6) g_wHour = wpeek(g_tagSystemTime, 8) g_wMinute = wpeek(g_tagSystemTime, 10) g_wSecond = wpeek(g_tagSystemTime, 12) g_wMilliseconds = wpeek(g_tagSystemTime, 14)

とすれば

2010
6
6
5
12
39
4
937

となり、ズレもなく取得できます。
wpeekなので、インデックスを2バイトづつ進めてください。
蛇足ですが、g_wDayOfWeekは、曜日を数字で表したもので
日曜日:0、月曜日:1.....土曜日:6 となります。
テストした6月5日は土曜日なので、結果と一致します。



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