- 博客(1)
- 资源 (7)
- 收藏
- 关注
原创 串口通信跨平台
mac 下模拟串口 #! /usr/bin/env python #coding=utf-8 import pty import os import select import time def mkpty(): # master1, slave = pty.openpty() slaveName1 = os.ttyname(sl
2017-03-10 14:13:22 1359
获取时区,根据时区做 UTC时间到本地时间之间转换
unit uTimeZonesMgr;
interface
uses
Windows, SysUtils, Classes, Registry, DateUtils;
type
{* 用于读取时区注册表TZI(长度为44)的属性值,存储时区信息 *}
PRegTZIInfo = ^TRegTZIInfo;
TRegTZIInfo = record
Bias: Longint;
StandardBias: Longint;
DaylightBias: Longint;
StandardDate: TSystemTime;
DaylightDate: TSystemTime;
end;
{* 单个时区管理对象 *}
TTimeZone = class
private
FTimeZoneName: string;
//时区的显示名
FDisplay: string;
//夏令时的名字
FDlt: string;
//时区标准名字
FStd: string;
//是Time zone information的缩写,描述时区的一些重要信息
FTZI: PRegTZIInfo;
function GetSelfTimeZoneInformation: TTimeZoneInformation;
public
constructor Create;
destructor Destroy; override;
function UTCToLocalDateTime(const AUTC: TDateTime; var ALocalDateTime: TDateTime): Boolean;
function LocalDateTimeToUTC(const ALocalDateTime: TDateTime; var AUTC: TDateTime): Boolean;
public
property TimeZoneName: string read FTimeZoneName write FTimeZoneName;
property Display: string read FDisplay write FDisplay;
property Dlt: string read FDlt write FDlt;
property Std: string read FStd write FStd;
property TZI: PRegTZIInfo read FTZI write FTZI;
end;
{* 所有时区管理对象 *}
TTimeZones = class
private
FTimeZoneKeyPath: string;
FTimeZoneList: TStringList;
FDefaultTimeZone: TTimeZone;
procedure CollectTimeZone;
procedure DestoryTimeZones;
procedure CheckISDefaultTimeZone(ATimeZone: TTimeZone);
public
constructor Create;
destructor Destroy; override;
function FindTimeZone(const ADisplay: string): TTimeZone;
public
property TimeZoneList: TStringList read FTimeZoneList;
property DefaultTimeZone: TTimeZone read FDefaultTimeZone;
end;
implementation
{ TTimeZones }
procedure TTimeZones.CheckISDefaultTimeZone(ATimeZone: TTimeZone);
var
DefaultTimeZone: TTimeZoneInformation;
begin
GetTimeZoneInformation(DefaultTimeZone);
if (ATimeZone.TZI.Bias = DefaultTimeZone.Bias)
and (ATimeZone.Std = DefaultTimeZone.StandardName) then
FDefaultTimeZone := ATimeZone;
end;
procedure TTimeZones.CollectTimeZone;
var
reg, tempReg: TRegistry;
tempKeyPath: string;
tempTimeZoneStrings: TStrings;
iCir: Integer;
tempTimeZone: TTimeZone;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey(FTimeZoneKeyPath, False);
tempTimeZoneStrings := TStringList.Create;
try
reg.GetKeyNames(tempTimeZoneStrings);
for iCir := 0 to tempTimeZoneStrings.Count - 1 do
begin
tempKeyPath := FTimeZoneKeyPath + '\' + tempTimeZoneStrings.Strings[iCir];
tempReg := TRegistry.Create;
try
tempReg.RootKey := HKEY_LOCAL_MACHINE;
tempReg.OpenKey(tempKeyPath, False);
tempTimeZone := TTimeZone.Create;
tempTimeZone.TimeZoneName := tempTimeZoneStrings.Strings[iCir];
tempTimeZone.Display := tempReg.ReadString('Display');
tempTimeZone.Std := tempReg.ReadString('Std');
tempTimeZone.Dlt := tempReg.ReadString('Dlt');
tempReg.ReadBinaryData('TZI', tempTimeZone.TZI^, SizeOf(TRegTZIInfo));
FTimeZoneList.AddObject(tempTimeZone.Display, tempTimeZone);
if FDefaultTimeZone = nil then
CheckISDefaultTimeZone(tempTimeZone);
finally
tempReg.CloseKey;
tempReg.Free;
end;
end;
finally
tempTimeZoneStrings.Free;
end;
finally
reg.CloseKey;
reg.Free;
end;
end;
constructor TTimeZones.Create;
begin
FTimeZoneKeyPath := '\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones';
FTimeZoneList := TStringList.Create;
FTimeZoneList.Sorted := True;
FDefaultTimeZone := nil;
CollectTimeZone;
end;
procedure TTimeZones.DestoryTimeZones;
var
iCir: Integer;
tempTimeZone: TTimeZone;
begin
for iCir := 0 to FTimeZoneList.Count - 1 do
begin
tempTimeZone := TTimeZone(FTimeZoneList.Objects[iCir]);
tempTimeZone.Free;
end;
FTimeZoneList.Clear;
FTimeZoneList.Free;
end;
destructor TTimeZones.Destroy;
begin
DestoryTimeZones();
inherited;
end;
function TTimeZones.FindTimeZone(const ADisplay: string): TTimeZone;
var
iIndex: Integer;
begin
Result := nil;
FTimeZoneList.Sort;
if FTimeZoneList.Find(ADisplay, iIndex) then
begin
Result := TTimeZone(FTimeZoneList.Objects[iIndex]);
end;
end;
{ TTimeZone }
constructor TTimeZone.Create;
begin
FTZI := GetMemory(SizeOf(TRegTZIInfo));
FillMemory(FTZI, SizeOf(TRegTZIInfo), 0);
end;
destructor TTimeZone.Destroy;
begin
FreeMemory(FTZI);
inherited;
end;
function TTimeZone.GetSelfTimeZoneInformation: TTimeZoneInformation;
begin
GetTimeZoneInformation(Result);
Result.Bias := TZI^.Bias;
Result.StandardBias := TZI^.StandardBias;
Result.StandardDate := TZI^.StandardDate;
Result.DaylightBias := TZI^.DaylightBias;
Result.DaylightDate := TZI^.DaylightDate;
end;
function TTimeZone.LocalDateTimeToUTC(const ALocalDateTime: TDateTime;
var AUTC: TDateTime): Boolean;
var
tempLocalToLocal: TDateTime;
iMilliSecond: Int64;
begin
Result := UTCToLocalDateTime(ALocalDateTime, tempLocalToLocal);
if Result then
begin
if tempLocalToLocal > ALocalDateTime then
begin
iMilliSecond := MilliSecondsBetween(tempLocalToLocal, ALocalDateTime);
AUTC := IncMilliSecond(ALocalDateTime, iMilliSecond * -1);
end else
begin
iMilliSecond := MilliSecondsBetween(ALocalDateTime, tempLocalToLocal);
AUTC := IncMilliSecond(ALocalDateTime, iMilliSecond);
end;
Result := True;
end;
end;
function TTimeZone.UTCToLocalDateTime(const AUTC: TDateTime;
var ALocalDateTime: TDateTime): Boolean;
var
TimeZone: TTimeZoneInformation;
stUTC, stLC: SYSTEMTIME;
begin
Result := False;
TimeZone := GetSelfTimeZoneInformation;
DateTimeToSystemTime(AUTC, stUTC);
if SystemTimeToTzSpecificLocalTime(@TimeZone, stUTC, stLC) then
begin
ALocalDateTime := SystemTimeToDateTime(stLC);
Result := True;
end;
end;
end.
2014-07-31
字符串替换工具
1、 支持批量检索目录功能
2、 替换文件类型,可动态定义,维护:Searchtype.txt 即可
3、 支持ANSI到Unicode格式的转换
4、 替换规则自行定义。分割副(被替换字符串【一位长度的分割符】替换字符串)
Eg: 将【中国】替换成【China】 规则维护如下:
中国= China
中国>China
【分割符】在程序界面的【Decollator】选取或手工输入【分割符】
有操作说明!
2011-12-26
delphi code update from ansi to unicode
ANSI转 UTF8
ANSI转 Unicode
文本替换 替换规则 old=new (用txt维护替换规则,一行维护一个记录)
打包 fr2x-fr3converter.zip 工具,转换*.frf 到 *.fr3
适合delphi程序 ansi版升级到 unicode版
特点:批量检索工程文件,批量替换,批量转换。
2011-09-17
delphi7todelphi2010_AnsiToUnicode
批量将ansi格式文件批量转换为unicode文件
包括(*.pas *.dmf *.dpr)等文件
解决从DELPHI7 升级到高级版本的第一步转换工作
2011-09-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人