filetime,systemtime相互转化,获取文件创建时间,访问时间,修改时间,获取指定时间之前之后的SYSTEMTIME

// deleteOldFiles.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <string>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <sys/types.h>
#include <sys/stat.h>

using namespace std;
#pragma warning(disable:4996)
int main()
{
	//typedef struct _SYSTEMTIME {
	//	WORDwYear;
	//	WORDwMonth;
	//	WORDwDayOfWeek;
	//	WORDwDay;
	//	WORDwHour;
	//	WORDwMinute;
	//	WORDwSecond;
	//	WORDwMilliseconds;
	//} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

	//得到当前UTC时间
	SYSTEMTIME st;
	GetSystemTime(&st);
	char buf[128] = { 0 };
	sprintf_s(buf,"%04d-%02d-%02d %02d:%02d:%02d:%03d",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond,st.wMilliseconds);
	cout << "UTC时间为" << buf << endl;

	//得到本地时间
	SYSTEMTIME stLocal;
	GetLocalTime(&stLocal);
	memset(buf, 0, 128);
	sprintf_s(buf, "%04d-%02d-%02d %02d:%02d:%02d:%03d", stLocal.wYear, stLocal.wMonth, stLocal.wDay, stLocal.wHour, stLocal.wMinute, stLocal.wSecond, stLocal.wMilliseconds);
	cout << "本地时间为" << buf << endl;

	//FileTime:Contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC时间).
	//从1601到现在经历的100纳秒数,8个字节变量
	//typedef struct _FILETIME {
	//	DWORDdwLowDateTime;
	//	DWORDdwHighDateTime;
	//} FILETIME, *PFILETIME, *LPFILETIME;

	//SYSTEMTIME转成FILETIME
	//BOOL
	//	WINAPI
	//	SystemTimeToFileTime(
	//		_In_ CONST SYSTEMTIME * lpSystemTime,
	//		_Out_ LPFILETIME lpFileTime
	//	);
	//SYSTEMTIME转FILETIME
	FILETIME ft;
	SystemTimeToFileTime(&st, &ft);
	//FILETIME转SYSTEMTIME
	SYSTEMTIME st2;
	FileTimeToSystemTime(&ft, &st2);
	memset(buf, 0, 128);
	sprintf_s(buf, "%04d-%02d-%02d %02d:%02d:%02d:%03d", st2.wYear, st2.wMonth, st2.wDay, st2.wHour, st2.wMinute, st2.wSecond, st2.wMilliseconds);
	cout << "UTC时间为" << buf << endl;

	//当地时间转UTC时间
	FILETIME ftLocal;
	SystemTimeToFileTime(&stLocal, &ftLocal);
	LocalFileTimeToFileTime(&ftLocal, &ft);
	FileTimeToSystemTime(&ft, &st2);
	memset(buf, 0, 128);
	sprintf_s(buf, "%04d-%02d-%02d %02d:%02d:%02d:%03d", st2.wYear, st2.wMonth, st2.wDay, st2.wHour, st2.wMinute, st2.wSecond, st2.wMilliseconds);
	cout << "UTC时间为" << buf << endl;

	FileTimeToLocalFileTime(&ft, &ftLocal);
	FileTimeToSystemTime(&ftLocal, &stLocal);
	memset(buf, 0, 128);
	sprintf_s(buf, "%04d-%02d-%02d %02d:%02d:%02d:%03d", stLocal.wYear, stLocal.wMonth, stLocal.wDay, stLocal.wHour, stLocal.wMinute, stLocal.wSecond, stLocal.wMilliseconds);
	cout << "本地时间为" << buf << endl;

	//获取十天之前的日期
	ULARGE_INTEGER u1,offset,u2;
	offset.QuadPart = UInt32x32To64(10 * 24 * 3600, 10000000);
	u1.LowPart = ftLocal.dwLowDateTime;
	u1.HighPart = ftLocal.dwHighDateTime;
	u2.QuadPart = u1.QuadPart - offset.QuadPart;
	ftLocal.dwLowDateTime = u2.LowPart;
	ftLocal.dwHighDateTime = u2.HighPart;
	SYSTEMTIME stOld;
	FileTimeToSystemTime(&ftLocal, &stOld);
	memset(buf, 0, 128);
	sprintf_s(buf, "%04d-%02d-%02d %02d:%02d:%02d:%03d", stOld.wYear, stOld.wMonth, stOld.wDay, stOld.wHour, stOld.wMinute, stOld.wSecond, stOld.wMilliseconds);
	cout << "十天前时间为" << buf << endl;

	//获取文件的创建时间,修改时间,访问时间
	HANDLE handleFile = CreateFileW(L"F:\\output\\测试文档.docx", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
	if (handleFile != INVALID_HANDLE_VALUE)
	{
		FILETIME ftCreationTime, ftLastAccessTime, ftLastWriteTime;
		GetFileTime(handleFile, &ftCreationTime, &ftLastAccessTime, &ftLastWriteTime);
		SYSTEMTIME creatTime, accessTime, modifyTime;
		FILETIME ftCreationTimeLocal, ftLastAccessTimeLocal, stLastWriteTimeLocal;
		FileTimeToLocalFileTime(&ftCreationTime, &ftCreationTimeLocal);
		FileTimeToLocalFileTime(&ftLastAccessTime, &ftLastAccessTimeLocal);
		FileTimeToLocalFileTime(&ftLastWriteTime, &stLastWriteTimeLocal);

		FileTimeToSystemTime(&ftCreationTimeLocal, &creatTime);
		FileTimeToSystemTime(&ftLastAccessTimeLocal, &accessTime);
		FileTimeToSystemTime(&stLastWriteTimeLocal, &modifyTime);
		memset(buf, 0, 128);
		sprintf_s(buf, "%04d-%02d-%02d %02d:%02d:%02d:%03d", creatTime.wYear, creatTime.wMonth, creatTime.wDay, creatTime.wHour, creatTime.wMinute, creatTime.wSecond, creatTime.wMilliseconds);
		cout << "创建时间为" << buf << endl;
		memset(buf, 0, 128);
		sprintf_s(buf, "%04d-%02d-%02d %02d:%02d:%02d:%03d", accessTime.wYear, accessTime.wMonth, accessTime.wDay, accessTime.wHour, accessTime.wMinute, accessTime.wSecond, accessTime.wMilliseconds);
		cout << "访问时间为" << buf << endl;
		memset(buf, 0, 128);
		sprintf_s(buf, "%04d-%02d-%02d %02d:%02d:%02d:%03d", modifyTime.wYear, modifyTime.wMonth, modifyTime.wDay, modifyTime.wHour, modifyTime.wMinute, modifyTime.wSecond, modifyTime.wMilliseconds);
		cout << "修改时间为" << buf << endl;
		CloseHandle(handleFile);
	}
    return 0;
}

运行结果:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,可以使用以下方法来获取文件的最后修改时间: 1. `File.lastModified()`方法:该方法返回文件最后修改时间的毫秒数,可以通过`Date`类将其转换为日期时间格式。 2. `Path.toFile().lastModified()`方法:该方法与`File.lastModified()`方法类似,也返回文件最后修改时间的毫秒数,需要使用`Date`类进行格式转换。 3. `Files.getLastModifiedTime(Path path)`方法:该方法返回一个表示文件最后修改时间的`FileTime`对象,可以使用`FileTime.toMillis()`方法将其转换为毫秒数。 示例代码: ```java import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.FileTime; import java.util.Date; public class FileLastModifiedExample { public static void main(String[] args) { // 使用File获取文件最后修改时间 File file = new File("example.txt"); long lastModified = file.lastModified(); Date date1 = new Date(lastModified); System.out.println("File last modified time: " + date1); // 使用Path类和Files类获取文件最后修改时间 Path path = Paths.get("example.txt"); try { FileTime lastModifiedTime = Files.getLastModifiedTime(path); long millis = lastModifiedTime.toMillis(); Date date2 = new Date(millis); System.out.println("Path last modified time: " + date2); } catch (Exception e) { e.printStackTrace(); } } } ``` 注意:以上方法获取的是文件最后修改时间,而不是文件的创建时间访问时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值