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. 字符串与byte数组转换

    string weclome=""; byte[] data = new byte[1024]; //字符串转byte数组 data = Encoding.ASCII.GetByt ...

  2. LeetCode 171 Excel Sheet Column Number

    Problem: Given a column title as appear in an Excel sheet, return its corresponding column number. F ...

  3. 【XLL API 函数】xlfUnregister (Form 2)

    此函数可以被 Excel 已经载入的 XLL 或 DLL 调用.它等效于宏表函数 UNREGISTER. xlfUnregister 有两种调用形式: 形式1:Unregister 单独的命令或函数 ...

  4. ASP.net绑定文本框Enter事件到按钮 ASP.NET执行后台执行JS方法

    txtAccountBarcode.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if (( ...

  5. INNODB

    INNODB,是Mysql5.7的默认存储引擎,是事务安全的,支持ACID,具有提交,回滚和crash-recovery[灾备]能力,以保护用户数据. 优势:一旦Server崩溃,Innodb会自动保 ...

  6. 自定义UIDatePikerView

    1.添加文件GoYearMonthDayPickerView.h .m .xib.NSDate+Helper.h .m.iCarousel.h .m 2.在Lable上显示日期 UILabel *ag ...

  7. Cocoapods的使用教程

    前言 对于iOS App的开发,几乎都采用了Cocoapods来管理第三方库,那么对于我们开发人员来说,这是必备技能,必须要掌握如何使用.这篇文章就是介绍如何安装和使用CocoaPods的. 这篇文章 ...

  8. 设计模式学习之适配器模式(Adapter,结构型模式)(14)

    参考链接:http://www.cnblogs.com/zhili/p/AdapterPattern.html一.定义:将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼 ...

  9. Delphi面向对象的属性

    可以把属性看成是能对类中的数据进行修改和执行代码的特殊的辅助域.对于组件来说,属性就是列在Object Inspector窗口的内容.下面的例子定义了一个有属性的简单对象 TMyObject = cl ...

  10. Delphi基本数据类型---枚举、子界、集合、数组

    参考:http://blog.csdn.net/qustdong/article/details/9230743 参考:http://www.cnblogs.com/xumenger/p/440222 ...