delphi 时间格式操作
FormatDateTime('yyyy-mm-dd hh:nn:ss',Now)
FormatDateTime('hh:mm:ss:zz',Now)
if (TimeOf(now) < pub_StartWorkTime) or (TimeOf(now) > pub_EndWorkTime) then
exit; //非工作时间退出
读ini
pub_StartWorkTime := MyIniFile.Readtime('Setup','StartWorkTime',strtotime('08:00'));
pub_EndWorkTime := MyIniFile.Readtime('Setup','EndWorkTime',strtotime('23:59'));
Delphi中TFileTime、TSystemTime 及 DOS 时间
//TSystemTime 是系统定义的结构, 一看就是最方便实用的那种, 但要占 16 个字节:
TSystemTime = record
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end; //TFileTime 也是系统定义的结构, 同 TDateTime 一样大小, 但结构原理完全不同:
TFileTime = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
TFileTime 记录的是从 1601-1-1 起的时间值, 以 100 纳秒(也就是万分之一毫秒)为单位 //DOS 时间就是一个 32 位(4字节)的整数(Integer), 好像没有专门的结构, 可用 LongRec 等代为解析.
DOS 时间的尺寸是 TFileTime、TDateTime 的 1/2, 是 TSystemTime 的 1/4; 因此不很精确.
它只能表示从 1980-2107 之间的时间, 且只能精确到 2 秒.
//下面几个函数一看就知道谁转换到谁:
SysUtils.DateTimeToSystemTime();
SysUtils.SystemTimeToDateTime(); Windows.SystemTimeToFileTime();
Windows.FileTimeToSystemTime(); Windows.FileTimeToDosDateTime();
Windows.DosDateTimeToFileTime(); //但并没有直接给 TFileTime 和 TDateTime 直接转换的函数;
//下面两个函数是 TDateTime 和 DOS 时间的转换; 文件的创建、修改、访问时间就是用这个 DOS 时间记录的.
SysUtils.DateTimeToFileDate();
SysUtils.FileDateToDateTime(); {转换到 DOS 时间的例子:}
var
T: TDateTime;
F,DosTime: Integer;
FileTime: TFileTime;
SystemTime: TSystemTime;
begin
{构建一个 TDateTime, 并转换到 DOS 时间}
T := EncodeDateTime(2009, 5, 22, 11, 22, 33, 999);
F := DateTimeToFileDate(T);
ShowMessage(IntToStr(F)); //985029328; 注意这个数很小, 下面会发现不精确 {再从 DOS 时间转回 TDateTime}
T := FileDateToDateTime(F);
ShowMessage(FormatDateTime('yyyy-m-d h:m:s:zzz', T)); //2009-5-22 11:22:32:000; 只精确到 2 秒 {TDateTime -> TSystemTime -> TFileTime -> DOS 时间}
DateTimeToSystemTime(T, SystemTime);
SystemTimeToFileTime(SystemTime, FileTime);
FileTimeToDosDateTime(FileTime, LongRec(DosTime).Hi, longRec(DosTime).Lo);
ShowMessage(IntToStr(SizeOf(SystemTime))); //985029328; 和上面得到的值一样
end;
DateTimeToFileDate 转换出的时间不是 TFileTime, 而是 Dos 时间或叫文件时间;
譬如我们用
FileAge 函数返回的文件最后修改的时间(一个 Integer)就是个 Dos 时间.
{读取记事本程序最后被修改的时间}
var
DosTime: Integer;
FileTime: TFileTime;
SysTime: TSystemTime;
DateTime: TDateTime;
str: string;
begin
DosTime := FileAge('C:\Windows\System32\Notepad.exe');
ShowMessage(IntToStr(DosTime)); //948804037; 这是读取结果
{转换为可以理解的格式}
DosDateTimeToFileTime(LongRec(DosTime).Hi, LongRec(DosTime).Lo, FileTime);
FileTimeToSystemTime(FileTime, SysTime);
str := Format('%d年%d月%d日 %d:%d:%d', [SysTime.wYear, SysTime.wMonth,
SysTime.wDay, SysTime.wHour, SysTime.wMinute, SysTime.wSecond]);
ShowMessage(str); //2008年4月13日 19:14:10
{如果仅仅是要这个时间, 可以这样}
FileAge('C:\Windows\System32\Notepad.exe', DateTime);
ShowMessage(DateTimeToStr(DateTime)); //2008-4-13 19:14:10
end;
又是我们可能只需要一个 TSystemTime 格式的时间, 没必要转来转去, 可以直接用 GetLocalTime 函数获取:
var
SysTime: TSystemTime;
DT1, DT2: TDateTime;
begin
GetLocalTime(SysTime);
DT1 := SystemTimeToDateTime(SysTime); DT2 := Now; {这两个时间显示应该是一样的}
ShowMessage(DateTimeToStr(DT1));
ShowMessage(DateTimeToStr(DT2));
end;
另外 FileTimeToLocalFileTime 和 LocalFileTimeToFileTime 是本地时间和
UTC(国际标准计时) 的转换;
用 API 函数获取的 TFileTime 时间都是 UTC 格式的, 需要转换使用.
delphi 时间格式操作的更多相关文章
- SQL导入txt以及SQL中的时间格式操作
原文:SQL导入txt以及SQL中的时间格式操作 MySQL中导入txt的指令为: load data local infile "路径名称" into table "表 ...
- Delphi获取与设置系统时间格式,即GetLocaleInfo和SetLocaleInfo
在Delphi中,特别是在写管理系统软件时,经常要用到 FormatDateTime 以将 TDateTime 格式的日期时间转换成字符串形式的值显示或保存起来,或者用 StrToDateTime将字 ...
- Delphi获得与设置系统时间格式《转》
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syst ...
- 转换GMT秒数为日期时间格式-Delphi源码
转换GMT秒数为日期时间格式-Delphi源码.收藏最近在写PE分析工具的时候,需要转换TimeDateStamp字段值为日期时间格式,这是Delphi的源码. //把GMT时间的秒数转换成日期时间格 ...
- 不修改系统日期和时间格式,解决Delphi报错提示 '****-**-**'is not a valid date and time
假如操作系统的日期格式不是yyyy-MM-dd格式,而是用strtodate('2014-10-01')) 来转换的话,程序会提示爆粗 '****-**-**'is not a valid date ...
- Delphi 设置时间格式
// 设置WINDOWS系统的短日期的格式SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, 'yyyy-MM-dd'); Applicat ...
- GMT 时间格式转换到 TDateTime (Delphi)
//GMT 时间格式转换到 TDateTime //忽略时区 function GMT2DateTime(const pSour:PAnsiChar):TDateTime; function GetM ...
- 时间操作(JavaScript版)—最简单比較两个时间格式数据的大小
呵呵呵,在软件研发过程中假设遇到要比較两个时间的大小.你会怎么做.嗯嗯嗯,非常直观的做法就是把"-"去掉,再比較大小,真的有必要吗?看以下最简单的时间比較方式: <!DOCT ...
- delphi关于文件操作集锦
关于文件操作集锦 取得该快捷方式的指向EXE关键词:快捷方式 LNK unit Unit1; interface usesWindows, Messages, SysUtils, Varian ...
随机推荐
- XLL 框架库中的函数
这个框架库,可以让编写 XLL 更加容易.包含了管理 XLOPER/XLOPER12 内存的简单函数,创建临时 XLOPER/XLOEPR12 ,强制调用回调函数 (Excel4,Excel4v,Ex ...
- 使用Apache+Dreamweaver(或者H-builder)搭建php开发环境
使用得工具说明 php+Apache服务器+Dreamweaver+mysql数据库 下载安装好wamp,可以在网上直接百度下载,为了方便,我给放个百度云的链接.wamp下载:链接:http://pa ...
- [Android Pro] synchronized与static synchronized 的区别
reference to : http://www.cnblogs.com/shipengzhi/articles/2223100.html 1.synchronized与static synchr ...
- 使用vsphere client 克隆虚拟机
免费的VMWare ESXi5.0非常强大,于是在vSphere5.0平台中ESXi取代了ESX.,使用ESXi经常会遇到这样的问题,我需要建立多个虚拟机,都是windows2003操作系统,难道必须 ...
- 并发用户数与 TPS 之间的关系
1. 背景 在做性能测试的时候,很多人都用并发用户数来衡量系统的性能,觉得系统能支撑的并发用户数越多,系统的性能就越好:对TPS不是非常理解,也根本不知道它们之间的关系,因此非常有必要进行解释. 2 ...
- Linux snmp
http://www.cnblogs.com/amberly/p/4364072.html http://blog.csdn.net/awenluck/article/details/50220221
- volatile关键字与线程间通信
>>Java内存模型 现在计算机普遍使用多处理器进行运算,并且为了解决计算机存储设备和处理器的运算速度之间巨大的差距,引入了高速缓存作为缓冲,缓存虽然能极大的提高性能,但是随之带来的缓存一 ...
- Delphi线程同步(临界区、互斥、信号量)
当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源. 例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件的字符数.当然,在整个文件调入内存之前,统计它的计数是 ...
- 拷贝,集合,函数,enumerate,内置函数
1.拷贝 字符串和数字.赋值 id一样 import copy #提供拷贝功能 copy.copy() #原来的和现在的一起修改,不用修改时用浅copy,节省内存,复制最外层 copy.deepcop ...
- 【mysql创建用户|删除用户|修改用户权限|常用命令】
原文链接:http://blog.csdn.net/leili0806/article/details/8573636 1. CREATE USER 语法: CREATE USER 'us ...