時刻のフォーマット          <TOP>


SYSTEMTIMEで取得した時刻を地域の時刻にフォーマットします。

GetThreadLocale スレッドのロケールIDを取得

SetThreadLocale スレッドのロケールIDを設定

GetLocalTime ローカルタイムを取得

GetTimeFormat 時刻をフォーマットし、指定された地域に対応する時刻文字列を作成

 

GetTimeFormat

    Ret = Api_GetTimeFormat(0, 0, ST, "hh:mm:ss JST", fTime, Len(fTime))

        h  12時間制。先頭に「0」が付かない
        hh 12時間制。必要に応じ先頭に「0」が付く
        H  24時間制。先頭に「0」が付かない
        HH 24時間制。必要に応じ先頭に「0」が付く
        m  分。先頭に「0」が付かない
        mm 分。必要に応じ先頭に「0」が付く
        s  秒。先頭に「0」が付かない
        ss 秒。必要に応じ先頭に「0」が付く
        t  時刻マーカー。「A」「P」
        tt 時刻マーカー。「AM」「PM」「午前」「午後」

参照

簡易アナログ時計

 

'================================================================
'= 時刻のフォーマット
'=    (GetTimeFormat.bas)
'================================================================
#include "Windows.bi"

#define LOCALE_SYSTEM_DEFAULT &H400      'システムのデフォルトロケール
#define LOCALE_USER_DEFAULT &H800        '現在のユーザのデフォルトロケール
#define LOCALE_NOUSEROVERRIDE -2147483648'システムの既定の設定
#define LOCALE_USE_CP_ACP &H40000000     'ロケールのコードページの代わりに、システムのANSIコードページを使う
#define TIME_NOMINUTESORSECONDS &H1      '分と秒を使わない
#define TIME_NOSECONDS &H2               '秒を使わない
#define TIME_NOTIMEMARKER &H4            '時刻マーカーを使わない(AM/PM)
#define TIME_FORCE24HOURFORMAT &H8       '24時間制で表記

Type SYSTEMTIME
    wYear         As Integer
    wMonth        As Integer
    wDayOfWeek    As Integer
    wDay          As Integer
    wHour         As Integer
    wMinute       As Integer
    wSecond       As Integer
    wMilliseconds As Integer
End Type

' 時刻をフォーマットし、指定された地域に対応する時刻文字列を作成
Declare Function Api_GetTimeFormat& Lib "kernel32" Alias "GetTimeFormatA" (ByVal Locale&, ByVal dwFlags&, lpTime As SYSTEMTIME, ByVal lpFormat As Any, ByVal lpTimeStr$, ByVal cchTime&)

' 呼び出し側スレッドの現在のロケールを取得
Declare Function Api_GetThreadLocale& Lib "Kernel32" Alias "GetThreadLocale" ()

' 呼び出し側スレッドの現在のロケールを設定
Declare Function Api_SetThreadLocale& Lib "kernel32" Alias "SetThreadLocale" (ByVal Locale&)

' ローカルタイムを取得
Declare Sub Api_GetLocalTime Lib "Kernel32" Alias "GetLocalTime" (lpSytemTime As SYSTEMTIME)

Var Shared Text(7) As Object
Var Shared Timer1 As Object

For i = 0 To 7
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(I).SetFontSize 14
Next
Timer1.Attach GetDlgItem("Timer1")

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    Var st As SYSTEMTIME
    Var fTime As String * 256
    Var Ret As Long
   
    If Api_GetThreadLocale <> LOCALE_SYSTEM_DEFAULT Then
        Ret = Api_SetThreadLocale(LOCALE_SYSTEM_DEFAULT)
    End If
   
    Api_GetLocalTime st
   
    Ret = Api_GetTimeFormat(0, 0, st, "th:m:s", fTime, Len(fTime))
    Text(4).SetWindowText Left$(fTime, Ret)

    Ret = Api_GetTimeFormat(0, 0, st, "tthh:mm:ss", fTime, Len(fTime))
    Text(5).SetWindowText Left$(fTime, Ret)

    Ret = Api_GetTimeFormat(0, 0, st, "hh:mm:ss", fTime, Len(fTime))
    Text(6).SetWindowText Left$(fTime, Ret)

    Ret = Api_GetTimeFormat(0, 0, st, "HH:mm:ss", fTime, Len(fTime))
    Text(7).SetWindowText Left$(fTime, Ret)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End