更改檔案日期時間
來源:CWW
在Window系統中,時間日期本人知道的有以下數種
1.SystemTime: system time is expressed in Coordinated Universal Time (UTC)
2.LocalTime: 指的是local PC的時間日期,即vb Date() Time()所傳回的日期時間
3.FileTime : 檔案儲存的時間格式
前面兩種日期的格式都是
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 SYSTEMTIME的格式夠清楚了,而FileTime則是
Type FileTime
dwLowDateTime As Long
dwHighDateTime As Long
End Type
The FILETIME structure is a 64-bit value representing the number of
100-nanosecond intervals since January 1, 1601
這三個時間是可以做轉換的,LocalTime對SystemTime最簡單
SystemTime = LocalTime + 時間差 (以台灣來說 時間差 = -8小時)
我們可以用GetTimeZoneInformation()來取得時間差。
而SystemTime和FileTime間的轉換則可用
FileTimeToSystemTime() SystemTimeToFileTime()來轉換。剩下的就是更動時間的部
份,那使用SetFileTime來完成
SetFileTime(
HANDLE hFile, // identifies the file
CONST FILETIME * lpftCreation, // time the file was created
CONST FILETIME * lpftLastAccess, // time the file was last accessed
CONST FILETIME * lpftLastWrite // time the file was last written
);
如果不想更動日期,相對應的參數傳Null進去 。
另可參考讀取檔案建立時間及存取時間
'以下程式在Form,需 textBox * 1 Command Button * 1
Option Explicit
Private hFile As Long
Private 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 Long
hFile = 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
|
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)
'以下在.Bas
|