私が知っているように、我々はUNIXタイムスタンプは、VB日VBAでは、UTCのUNIXタイムスタンプをローカルタイムゾーンに変換する方法は簡単ですか?
CDate関数([UNIXタイムスタンプ]/60/60/23)+ "1970年1月1日"
に変換大まかに下に使用することができますただし、タイムゾーンと昼光情報は考慮されません。
タイムゾーンは大したことではありません。しかし、私は、特定のUNIXタイムスタンプの日光バイアス情報を取得することはできません。
Date 1/1の日光バイアスはDate 6/1とは明らかに異なりますが、Date 3/12またはDate 11/5の場合、日中のバイアス計算は非常に複雑です。
"FileTimeToLocalFileTime"や "GetTimeZoneInformation"のようないくつかのAPIを試しましたが、どちらも機能しませんでした。ここで
は、夏時間バイアス
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function LocalFileTimeToFileTime Lib "kernel32" ([email protected], [email protected]) As Long
Private Declare PtrSafe Function FileTimeToLocalFileTime Lib "kernel32" ([email protected], [email protected]) As Long
#Else
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" ([email protected], [email protected]) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" ([email protected], [email protected]) As Long
#End If
Public Function ToUTC(ByVal datetime As Date) As Date
Dim [email protected], [email protected]
ftLoc = (datetime - #1/1/1601#) * 86400000
LocalFileTimeToFileTime ftLoc, ftUtc
ToUTC = ftUtc/86400000# + #1/1/1601#
End Function
Public Function FromUTC(ByVal datetime As Date) As Date
Dim [email protected], [email protected]
ftUtc = (datetime - #1/1/1601#) * 86400000
FileTimeToLocalFileTime ftUtc, ftLoc
FromUTC = ftLoc/86400000# + #1/1/1601#
End Function
Function getDateFromTimestamp(ByVal value) As Date
Dim t1, t2
t1 = CDate(value/60/60/24) + "1/1/1970"
t2 = FromUTC(t1)
Debug.Print t2 - t1
getDateFromTimestamp = t2
End Function
*からタイムスタンプ*を取得していますか?なぜすべてが「通貨」のタイプで宣言されていますか? – Comintern
通貨はありませんでしたか? UNIXのタイムスタンプは、DBのhttp jsonテキストからのものです。 –
'src @'は 'src As Currency'と同じものです。型ヒントについては、[documentation page](http://stackoverflow.com/documentation/vba/877/declaring-variables/2960/type-hints)を参照してください。 – Comintern