Delphi中获取Unix时间戳及注意事项

uses DateUtils;
DateTimeToUnix(Now)

可以转换到unix时间,但是注意的是,它得到的时间比C语言中time()得到的时间大了86060,这是因为Now是当前时区的时间,c语言中time()是按格林威治时间计算的,北京时间比格林威治时间多了8小时,DateTimeToUnix(Now)-86060 就和c语言中time()得到的一样了。

但我进一步研究DateTimeToUnix函数时发现,Delphi中的时间没有经过任何的转换,是直接读取系统时间

我试着改变当前计算机时区,发现Delphi返回值没有任何改变。

而在C++中,改变计算机时区,则time()返回值也随着改变,这就说明C++中标准时间是通过本地时间和当前时区进行计算得来的。

因此,在Delphi开发时,需要注意Delphi获取的时间戳是当前计算机所在时区时间,并非标准UTC时间。

UnixToDateTime()函数并没有对时区进行转换,仅仅是对时间进行了转换。

文章来源:http://blog.csdn.net/missmecn/article/details/5870639

Posted in 软件开发 at August 23, 2017. by 傻猫 .    Views: 351    No Comments

CnPack 组件包所有源代码

CnPack 2009-09-14 SVN 包,包括以下内容:

  1. CnPack 组件包所有源代码。
  2. CnPack 开发组所有文档和模板,其中帮助文档目前包括多语帮助文档、CnDebugger 接口帮助文档、CnCalendar 历法说明文档、平滑字体组件帮助文档、停靠组件帮助文档等。
  3. 开发组其它工作成果。

以下是 cnpack\Source 目录内容说明:

\Common -公共库目录

CnBase64.pas
Base64 编码解码算法单元

CnCalClass.pas
历法计算类库

查看更多内容...

Posted in 软件开发 at August 23, 2017. by 傻猫 .    Views: 384    No Comments

恢复delphi7 文件关联

我的机器上先装了Delphi6,之后又装了Delphi2006,昨日将Delphi2006卸载后,Delphi相关的.dpr、.pas等文件都既不见了图标又失去了关联,Delphi6没有自动恢复文件关联的功能。

Windows命令assoc[.ext[=[fileType]]],
.ext:指定跟文件类型关联的文件扩展名,
fileType 指定跟文件扩展名关联的文件类型。

在命令行执行以下命令即可。

assoc.bpg=BorlandProjectGroup
assoc.dpr=DelphiProject
assoc.pas=DelphiUnit
assoc.dfm=DelphiForm
assoc.xfm=DelphiCLXForm
assoc.dpk=DelphiPackage

Posted in 软件开发 at June 10, 2017. by 傻猫 .    Views: 1276    No Comments

解决错误提示unable to invoke code completion due to errors in source cord.

出现这个错误,一般都是直接复制代码产生的,可能delphi编译器有点问题,把复制过来的代码粘贴到delphi中的时候,默认每行后面会产生很多不可见得空格,主要的原因还是字符串的格式有问题,所以就会出现代码明明能编译通过,程序也能正常运行的,可是自己写代码的时候,在delphi默认提示跳出的时候,不能提示,跳出编译错误unable to invoke code completion due to errors in source cord.

解决办法,把delphi的代码全部选择,复制,再打开ultraedit,ctrl+v粘贴到ultraedit中,再全部选择代码----格式--删除行尾空格,这样把一些不规则的

filehelper_1488336620419_73.png

看不到的空格去掉,然后再复制回到delphi中,重新编译写,就没有这个提示了,这样错误,有时候是很难看出来的,代码没错,语法没错。。。

Posted in 软件开发 at March 1, 2017. by 傻猫 .    Views: 1131    No Comments

Windows下RSA密钥生成工具openssl

  1. 生成原始 RSA私钥文件 private_key.pem
    openssl genrsa -out private_key.pem 1024

  2. 将原始 RSA私钥转换为 pkcs8格式
    openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out rsa_private_key.pem

  3. 生成 RSA公钥 rsa_public_key.pem
    openssl rsa -in private_key.pem -pubout -out rsa_public_key.crt

  4. 从公钥 rsa_public_key.pem 获取十六进制的公钥(第一段16进制字符串)
    openssl asn1parse -out temp.ans -i -inform PEM<private_key.pem

最终获取文件列表:
rsa_private_key.pem
rsa_public_key.crt

16进制公钥字符串用于js端加密

下载Openssl工具
openssl.zip

Posted in 软件开发 at December 7, 2016. by 傻猫 .    Views: 940    No Comments

关于SMExportToXLS导出数据窜行的问题

前段时间买了一套SMExport suite for Delphi/CBuilder (with sources) 组件,默认导出的XLS表格数据,发现有窜行的问题,很是郁闷,后来发现是因为Options选项中 soFieldMask 没有选中,只需要选中即可解决,也是醉了,先MARK一下。

微信截图_20161118095017.png

另外导出表格里,有大量空白字符,可以在导出组件OnGetCellParams事件中添加以下代码即可。

procedure TFrm_KduserManage.smxprtxlsx1GetCellParams(Sender: TObject;
Field: TField; var Text: WideString; AFont: TFont;
var Alignment: TAlignment; var Background: TColor;
var CellType: TCellType);
begin
if Assigned(Field) then
begin
Text:=Trim(Text);
end;
end;

Posted in 软件开发 at November 18, 2016. by 傻猫 .    Views: 1192    No Comments

stringgrid删除选中行

定义一个从TStringGrid类继承的新类如下:
type
TMyGrid = class(TStringgrid);

之后,删除时:你可以这样写:
TMyGrid(Grid).DeleteRow(Grid.Row); //Grid为你的StringGrid控件

说明:DeleteRow方法是TCustomGrid类申明的protected方法,可以删除表格中的一行;
而TStringGrid没有将这一方法公开出来(意味着其他类将无法访问),所以你只需要定义一个从TStringGrid类继承的新类就可以了。

Posted in 软件开发 at July 4, 2016. by 傻猫 .    Views: 2169    No Comments

StringGrid排序/隔行变色

//排序函数//////////////////////////////////////////////
procedure Quicksort(Grid:TStringGrid; var List:array of integer;
min, max,sortcol,datatype: Integer);
{List is a list of rownumbers in the grid being sorted}
var
med_value : integer;
hi, lo, i : Integer;

function compare(val1,val2:string):integer;
var
int1,int2:integer;
float1,float2:extended;
errcode:integer;
begin
case datatype of
0: result:=ANSIComparetext(val1,val2);
1: begin
int1:=strtointdef(val1,0);
int2:=strtointdef(val2,0);
if int1>int2 then result:=1
else if int1<int2 then result:=-1
else result:=0;
end;

  2: begin
       val(val1,float1,errcode);
       if errcode<>0 then float1:=0;
       val(val2,float2,errcode);
       if errcode<>0 then float2:=0;
       if float1>float2 then result:=1
       else if float1<float2 then result:=-1
       else result:=0;
     end;
   else result:=0;
end;

end;

查看更多内容...

Posted in 软件开发 at July 4, 2016. by 傻猫 .    Views: 2161    No Comments