Call APIPublic Declare Function SetFileTime Lib "kernel32" Alias "SetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As LongPublic Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type
'SetFileTime junk Private Type FileTime dwLowDateTime As Long dwHighDateTime As Long End Type Private 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 TypePrivate Const GENERIC_WRITE = &H40000000 Private Const GENERIC_READ = &H80000000 Private Const FILE_ATTRIBUTE_NORMAL = &H80 Private Const INVALID_HANDLE_VALUE = -1 Private Const FILE_SHARE_READ = &H1 Private Const FILE_SHARE_WRITE = &H2 Private Const CREATE_NEW = 1 Private Const CREATE_ALWAYS = 2 Private Const OPEN_EXISTING = 3 Private Const OPEN_ALWAYS = 4Private Declare Function LocalFileTimeToFileTime Lib "Kernel32" (lpFileTime As FileTime, lpLocalFileTime As FileTime) As Long Private Declare Function CreateFile Lib "Kernel32" Alias "CreateFileA" (ByVal lpFilename As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function SetFileTime Lib "Kernel32" (ByVal hFile As Long, lpCreationTime As FileTime, lpLastAccessTime As FileTime, lpLastWriteTime As FileTime) As Long Private Declare Function CloseHandle Lib "Kernel32" (ByVal hObject As Long) As Long Private Declare Function SystemTimeToFileTime Lib "Kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FileTime) As Long Private Declare Function VariantTimeToSystemTime Lib "oleaut32.dll" (ByVal vtime As Date, lpSystemTime As SYSTEMTIME) As LongPrivate Function GetFileTime(ByVal aDate As Date) As FileTime Dim lTemp As SYSTEMTIME Dim lTime As FileTime VariantTimeToSystemTime aDate, lTemp SystemTimeToFileTime lTemp, lTime LocalFileTimeToFileTime lTime, GetFileTime End FunctionPublic Sub VBSetFileTime(ByVal sFile As String, ByVal CreationTime As Date, ByVal LastAccessTime As Date, ByVal LastWriteTime As Date) Dim hFile As Long Dim lCTime As FileTime,lATime As FileTime,lWTime As FileTime lCTime = GetFileTime(CreationTime) lATime = GetFileTime(LastAccessTime) lWTime = GetFileTime(LastWriteTime) hFile = CreateFile(sFile, GENERIC_WRITE Or GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) If hFile <> INVALID_HANDLE_VALUE Then Call SetFileTime(hFile, lCTime, lATime, lWTime) CloseHandle hFile End If End Sub
'以下程式在Form,需 textBox * 1 Command Button * 1 Option Explicit Private hFile As LongPrivate Sub Command1_Click() Dim lpct As FileTime, lplac As FileTime, lplwr As FileTime Dim ofs As OFSTRUCT Dim tZone As TIME_ZONE_INFORMATION Dim ft As SYSTEMTIME Dim dtdate As Date Dim bias As LonghFile = OpenFile("c:\prn2", ofs, OF_READWRITE) Call GetTimeZoneInformation(tZone) bias = tZone.bias ' 时间差, 以「分」为单位 '计算出Coordinated Universal Time (UTC). dtdate = CDate(Text1.Text) + TimeSerial(0, bias, 0)ft.wYear = Year(dtdate) ft.wMonth = Month(dtdate) ft.wDay = Day(dtdate) ft.wHour = Hour(dtdate) ft.wMinute = Minute(dtdate) ft.wSecond = Second(dtdate) ft.wDayOfWeek = WeekDay(dtdate) ft.wMilliseconds = 0 Call SystemTimeToFileTime(ft, lplwr)'更动hFile的时间,第2个叁数改Create DateTime '第3个叁数改Last Access DateTime '第四个叁数改Last Modify DateTime Call SetFileTime(hFile, ByVal 0, ByVal 0, lplwr) Call CloseHandle(hFile)End Sub Private Sub Form_Load() Text1.Text = "1998/06/03 5:50:10 AM" End Sub
'以下在.Bas Option Explicit Public Const OFS_MAXPATHNAME = 128 Public Const OF_READ = &H0 Public Const OF_READWRITE = &H2 Type OFSTRUCT cBytes As Byte fFixedDisk As Byte nErrCode As Integer Reserved1 As Integer Reserved2 As Integer szPathName(OFS_MAXPATHNAME) As Byte End Type 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 Type FileTime dwLowDateTime As Long dwHighDateTime As Long End Type Type TIME_ZONE_INFORMATION bias As Long StandardName(32) As Integer StandardDate As SYSTEMTIME StandardBias As Long DaylightName(32) As Integer DaylightDate As SYSTEMTIME DaylightBias As Long End Type Declare Function GetTimeZoneInformation Lib "kernel32" _ (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, _ lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As Any, lpLastAccessTime As Any, lpLastWriteTime As Any) As Long Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FileTime) As Long Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME) Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type FileTime
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private 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 TypePrivate Const GENERIC_WRITE = &H40000000
Private Const GENERIC_READ = &H80000000
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const INVALID_HANDLE_VALUE = -1
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const CREATE_NEW = 1
Private Const CREATE_ALWAYS = 2
Private Const OPEN_EXISTING = 3
Private Const OPEN_ALWAYS = 4Private Declare Function LocalFileTimeToFileTime Lib "Kernel32" (lpFileTime As FileTime, lpLocalFileTime As FileTime) As Long
Private Declare Function CreateFile Lib "Kernel32" Alias "CreateFileA" (ByVal lpFilename As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function SetFileTime Lib "Kernel32" (ByVal hFile As Long, lpCreationTime As FileTime, lpLastAccessTime As FileTime, lpLastWriteTime As FileTime) As Long
Private Declare Function CloseHandle Lib "Kernel32" (ByVal hObject As Long) As Long
Private Declare Function SystemTimeToFileTime Lib "Kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FileTime) As Long
Private Declare Function VariantTimeToSystemTime Lib "oleaut32.dll" (ByVal vtime As Date, lpSystemTime As SYSTEMTIME) As LongPrivate Function GetFileTime(ByVal aDate As Date) As FileTime
Dim lTemp As SYSTEMTIME
Dim lTime As FileTime
VariantTimeToSystemTime aDate, lTemp
SystemTimeToFileTime lTemp, lTime
LocalFileTimeToFileTime lTime, GetFileTime
End FunctionPublic Sub VBSetFileTime(ByVal sFile As String, ByVal CreationTime As Date, ByVal LastAccessTime As Date, ByVal LastWriteTime As Date)
Dim hFile As Long
Dim lCTime As FileTime,lATime As FileTime,lWTime As FileTime
lCTime = GetFileTime(CreationTime)
lATime = GetFileTime(LastAccessTime)
lWTime = GetFileTime(LastWriteTime)
hFile = CreateFile(sFile, GENERIC_WRITE Or GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If hFile <> INVALID_HANDLE_VALUE Then
Call SetFileTime(hFile, lCTime, lATime, lWTime)
CloseHandle hFile
End If
End Sub
Option Explicit
Private hFile As LongPrivate Sub Command1_Click()
Dim lpct As FileTime, lplac As FileTime, lplwr As FileTime
Dim ofs As OFSTRUCT
Dim tZone As TIME_ZONE_INFORMATION
Dim ft As SYSTEMTIME
Dim dtdate As Date
Dim bias As LonghFile = OpenFile("c:\prn2", ofs, OF_READWRITE)
Call GetTimeZoneInformation(tZone)
bias = tZone.bias ' 时间差, 以「分」为单位
'计算出Coordinated Universal Time (UTC).
dtdate = CDate(Text1.Text) + TimeSerial(0, bias, 0)ft.wYear = Year(dtdate)
ft.wMonth = Month(dtdate)
ft.wDay = Day(dtdate)
ft.wHour = Hour(dtdate)
ft.wMinute = Minute(dtdate)
ft.wSecond = Second(dtdate)
ft.wDayOfWeek = WeekDay(dtdate)
ft.wMilliseconds = 0
Call SystemTimeToFileTime(ft, lplwr)'更动hFile的时间,第2个叁数改Create DateTime
'第3个叁数改Last Access DateTime
'第四个叁数改Last Modify DateTime
Call SetFileTime(hFile, ByVal 0, ByVal 0, lplwr)
Call CloseHandle(hFile)End Sub
Private Sub Form_Load()
Text1.Text = "1998/06/03 5:50:10 AM"
End Sub
'以下在.Bas
Option Explicit Public Const OFS_MAXPATHNAME = 128
Public Const OF_READ = &H0
Public Const OF_READWRITE = &H2 Type OFSTRUCT
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(OFS_MAXPATHNAME) As Byte
End Type 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 Type FileTime
dwLowDateTime As Long
dwHighDateTime As Long
End Type Type TIME_ZONE_INFORMATION
bias As Long
StandardName(32) As Integer
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName(32) As Integer
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type Declare Function GetTimeZoneInformation Lib "kernel32" _
(lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, _
lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As Any, lpLastAccessTime As Any, lpLastWriteTime As Any) As Long
Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FileTime) As Long Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)