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 = recordwYear: Word;wMonth: Word;wDayOf...
//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 格式的, 需要转换使用.

Tags:时间 

delphi 时间格式操作的更多相关文章

  1. SQL导入txt以及SQL中的时间格式操作

    原文:SQL导入txt以及SQL中的时间格式操作 MySQL中导入txt的指令为: load data local infile "路径名称" into table "表 ...

  2. Delphi获取与设置系统时间格式,即GetLocaleInfo和SetLocaleInfo

    在Delphi中,特别是在写管理系统软件时,经常要用到 FormatDateTime 以将 TDateTime 格式的日期时间转换成字符串形式的值显示或保存起来,或者用 StrToDateTime将字 ...

  3. Delphi获得与设置系统时间格式《转》

    unit Unit1; interface uses   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syst ...

  4. 转换GMT秒数为日期时间格式-Delphi源码

    转换GMT秒数为日期时间格式-Delphi源码.收藏最近在写PE分析工具的时候,需要转换TimeDateStamp字段值为日期时间格式,这是Delphi的源码. //把GMT时间的秒数转换成日期时间格 ...

  5. 不修改系统日期和时间格式,解决Delphi报错提示 '****-**-**'is not a valid date and time

    假如操作系统的日期格式不是yyyy-MM-dd格式,而是用strtodate('2014-10-01')) 来转换的话,程序会提示爆粗 '****-**-**'is not a valid date ...

  6. Delphi 设置时间格式

    // 设置WINDOWS系统的短日期的格式SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, 'yyyy-MM-dd'); Applicat ...

  7. GMT 时间格式转换到 TDateTime (Delphi)

    //GMT 时间格式转换到 TDateTime //忽略时区 function GMT2DateTime(const pSour:PAnsiChar):TDateTime; function GetM ...

  8. 时间操作(JavaScript版)—最简单比較两个时间格式数据的大小

    呵呵呵,在软件研发过程中假设遇到要比較两个时间的大小.你会怎么做.嗯嗯嗯,非常直观的做法就是把"-"去掉,再比較大小,真的有必要吗?看以下最简单的时间比較方式: <!DOCT ...

  9. delphi关于文件操作集锦

        关于文件操作集锦 取得该快捷方式的指向EXE关键词:快捷方式 LNK unit Unit1; interface usesWindows, Messages, SysUtils, Varian ...

随机推荐

  1. 【编程题目】输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数, 使其和等于 m ... ★

    第 21 题(数组)2010 年中兴面试题编程求解:输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来. 我的思路: 从小 ...

  2. 【python】mysqlDB转xml中的编码问题

    背景:有mysql数据库,将数据从数据库中读取,并存储到xml中 采用了MySQLdb和lxml两个库 具体编码处理过程如下: . 指定mysql的编码方式 .取数据库data->判断data类 ...

  3. 如何用Jquery判断在键盘上敲的哪个按键

    有时候我们需要判断我们在键盘上敲了哪个键,这个需要查询下键盘上的键对应的值是多少,比如Enter键是13. 下面是Jquery代码,别忘了引用Jquery包哈. <script type=&qu ...

  4. balabalabala

    [微分享]:种子不落在肥土而落在瓦砾中,有生命力的种子决不会悲观和叹气,因为有了阻力才有磨炼.

  5. ASP.NET MVC中解决日志并发处理log4net

    本章主要内容是将异常信息写到队列中,然后通过线程写到文本文件中,速度非常快,没有阻塞和延迟加载 1.首先在Model中建一个类MyExceptionAttribute.cs public class ...

  6. NYOJ题目769乘数密码

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsQAAAJYCAIAAADqk2fsAAAgAElEQVR4nO3dPVLrytbG8XcS5AyEWA

  7. 1 mysql的安装

    win10 总之前期的步骤大概有:1下载安装:2 安装好后配置环境变量:3:登陆数据库 1:安装 mysql有安装版和直接解压就可以用的,据说大神都是安装的直接解压的,但鉴于自己是小白,就整了个安装版 ...

  8. 昨晚值班将发dla的程序改好后放入正式环境

    可是在修改的topic的发送文件中出现有节点没有对应,整个过程陆续调至有20分钟最后11电把新程序换掉.

  9. EF – 8.多对多关联

    5.6.10 <多对多关联(上)> 时长:9分57秒 难度:难 5.6.11<多对多关联(下)> 时长:8分50秒 难度:难 如果单独地把多对多关联的CRUD拿出来讲,确实比较 ...

  10. MongoDB基本命令

    1.  启动和停止MongoDB: 执行mongod命令启动MongoDB服务器.mongod有很多可配置的选项,我们通过mongod --help可以查看所有选项,这里仅介绍一些主要选项:    - ...