Delphi7 如何设置时间格式!

时间:2021-02-19 20:34:22
我有一个程序需要将日期格式的资料存到SQL,但当我的日期格式为 2005-10-27或2005.10.27时程序汇报告错误------但2005/10/27则可以正常存入.问:我如何在Delphi下将系统的2005-10-27或2005.10.27格式设置成为2005/10/27格式.  谢谢

11 个解决方案

#1


用formatdatetime('这里日期时间的格式',这里日期时间) 日期格式化函数来搞定

#2


楼主分是不是很多呀

#3


不是,我是需要将字符串 “0012005100711304000003722018"中的20051007113040中的年月日时间转入到SQL中,我的转换语句为:                                       FieldByName('icdatetime').AsString:=Copy(TemDate,1,4)+'/'+Copy(TemDate,5,2)+'/'+Copy(TemDate,7,2)+' '+Copy(TemDate,9,2)+':'+Copy(TemDate,11,2)+':'+Copy(TemDate,13,2);
程式执行时只有当我将系统时间格式设置为2005/10/27格式时方可正确执行,其他两种方式则报错,我如何将系统时间格式由2005-10-27或2005.10.27格式设置成为2005/10/27格式.  谢谢

#4


希望通过API解决---如果可以的话!我找到资料输入下列代码依然无效
//得到當前系統默認時區的日期 
 procedure GetDateFormat; 
 var 
   sFormatDate:String; 
 begin 
   SetLength(sFormatDate,17);//中文時區 
   GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SLONGDATE ,PChar(sFormatDate),17); 
 end; 
 
 //設置系統日期格式為yyyy-mm-dd 
 procedure SetDateFormat; 
 begin 
   SetLocaleInfoa(LOCALE_SYSTEM_DEFAULT, LOCALE_SLONGDATE, PChar('yyyy-mm-dd')); 
 end;

#5


倒,问问题要说清楚,还藏着掖着的,烦

#6


大哥误会了

#7


通过注册表读取 系统日期格式(分隔符)
uses
   Registry;


var
  reg: TRegistry;
  sDate, sTime: string;
begin
  reg := TRegistry.Create;
  reg.RootKey := HKEY_CURRENT_USER;
  if reg.OpenKey('\Control Panel\International\', False) then
  begin
    sDate := reg.ReadString('sDate');
    sTime := reg.ReadString('sTime');
  end;
end;


FieldByName('icdatetime').AsString:=Copy(TemDate,1,4)+'/'+Copy(TemDate,5,2)+'/'+Copy(TemDate,7,2)+' '+Copy(TemDate,9,2)+':'+Copy(TemDate,11,2)+':'+Copy(TemDate,13,2);

改为
FieldByName('icdatetime').AsString:=Copy(TemDate,1,4)+sDate+Copy(TemDate,5,2)+sDate+Copy(TemDate,7,2)+' '+Copy(TemDate,9,2)+sTime+Copy(TemDate,11,2)+sTime+Copy(TemDate,13,2);

#8


我看懂下面代码,请高手明示:

july:试试看下面的范例:
Unit1.h档
private: // User declarations
  AnsiString __fastcall GetsysShortDateFormat();
  AnsiString __fastcall GetsysLongDateFormat();
Unit1.cpp档
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Edit1->Text=GetsysShortDateFormat();  // 目前系统短日期格式
  Edit2->Text=GetsysLongDateFormat();   // 目前系统长日期格式
}
//---------------------------------------------------------------------------
AnsiString __fastcall TForm1::GetsysShortDateFormat()
{
  // 目前系统短日期格式
  AnsiString sgs;
  sgs.SetLength(12);
  GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SSHORTDATE ,sgs.c_str(),12);
  return sgs;
}
AnsiString __fastcall TForm1::GetsysLongDateFormat()
{
  // 目前系统长日期格式
  AnsiString sgs;
  sgs.SetLength(12);
  GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SLONGDATE ,sgs.c_str(),12);
  return sgs;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  // 更改短日期格式
  AnsiString str;
  str = "yyyy/MM/dd"; // 要更改的格式
  if (SetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, str.c_str()))
    ShowMessage("更改短日期格式成功");
  Edit1->Text=GetsysShortDateFormat();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  // 更改长日期格式
  AnsiString str;
  str = "yyyy/MM/dd";  // 要更改的格式
  if (SetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SLONGDATE, str.c_str()))
    ShowMessage("更改长日期格式成功");
  Edit2->Text=GetsysLongDateFormat();
}
yyyy/MM/dd 也可以 yyyy-MM-dd 看你高兴。
请参考!


#9


呵呵一个问题,到处发贴

#10


zsjzwj(北极熊)是正确的!

#11


我看不懂上面代码,请高手明示:

#1


用formatdatetime('这里日期时间的格式',这里日期时间) 日期格式化函数来搞定

#2


楼主分是不是很多呀

#3


不是,我是需要将字符串 “0012005100711304000003722018"中的20051007113040中的年月日时间转入到SQL中,我的转换语句为:                                       FieldByName('icdatetime').AsString:=Copy(TemDate,1,4)+'/'+Copy(TemDate,5,2)+'/'+Copy(TemDate,7,2)+' '+Copy(TemDate,9,2)+':'+Copy(TemDate,11,2)+':'+Copy(TemDate,13,2);
程式执行时只有当我将系统时间格式设置为2005/10/27格式时方可正确执行,其他两种方式则报错,我如何将系统时间格式由2005-10-27或2005.10.27格式设置成为2005/10/27格式.  谢谢

#4


希望通过API解决---如果可以的话!我找到资料输入下列代码依然无效
//得到當前系統默認時區的日期 
 procedure GetDateFormat; 
 var 
   sFormatDate:String; 
 begin 
   SetLength(sFormatDate,17);//中文時區 
   GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SLONGDATE ,PChar(sFormatDate),17); 
 end; 
 
 //設置系統日期格式為yyyy-mm-dd 
 procedure SetDateFormat; 
 begin 
   SetLocaleInfoa(LOCALE_SYSTEM_DEFAULT, LOCALE_SLONGDATE, PChar('yyyy-mm-dd')); 
 end;

#5


倒,问问题要说清楚,还藏着掖着的,烦

#6


大哥误会了

#7


通过注册表读取 系统日期格式(分隔符)
uses
   Registry;


var
  reg: TRegistry;
  sDate, sTime: string;
begin
  reg := TRegistry.Create;
  reg.RootKey := HKEY_CURRENT_USER;
  if reg.OpenKey('\Control Panel\International\', False) then
  begin
    sDate := reg.ReadString('sDate');
    sTime := reg.ReadString('sTime');
  end;
end;


FieldByName('icdatetime').AsString:=Copy(TemDate,1,4)+'/'+Copy(TemDate,5,2)+'/'+Copy(TemDate,7,2)+' '+Copy(TemDate,9,2)+':'+Copy(TemDate,11,2)+':'+Copy(TemDate,13,2);

改为
FieldByName('icdatetime').AsString:=Copy(TemDate,1,4)+sDate+Copy(TemDate,5,2)+sDate+Copy(TemDate,7,2)+' '+Copy(TemDate,9,2)+sTime+Copy(TemDate,11,2)+sTime+Copy(TemDate,13,2);

#8


我看懂下面代码,请高手明示:

july:试试看下面的范例:
Unit1.h档
private: // User declarations
  AnsiString __fastcall GetsysShortDateFormat();
  AnsiString __fastcall GetsysLongDateFormat();
Unit1.cpp档
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Edit1->Text=GetsysShortDateFormat();  // 目前系统短日期格式
  Edit2->Text=GetsysLongDateFormat();   // 目前系统长日期格式
}
//---------------------------------------------------------------------------
AnsiString __fastcall TForm1::GetsysShortDateFormat()
{
  // 目前系统短日期格式
  AnsiString sgs;
  sgs.SetLength(12);
  GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SSHORTDATE ,sgs.c_str(),12);
  return sgs;
}
AnsiString __fastcall TForm1::GetsysLongDateFormat()
{
  // 目前系统长日期格式
  AnsiString sgs;
  sgs.SetLength(12);
  GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SLONGDATE ,sgs.c_str(),12);
  return sgs;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  // 更改短日期格式
  AnsiString str;
  str = "yyyy/MM/dd"; // 要更改的格式
  if (SetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, str.c_str()))
    ShowMessage("更改短日期格式成功");
  Edit1->Text=GetsysShortDateFormat();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  // 更改长日期格式
  AnsiString str;
  str = "yyyy/MM/dd";  // 要更改的格式
  if (SetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SLONGDATE, str.c_str()))
    ShowMessage("更改长日期格式成功");
  Edit2->Text=GetsysLongDateFormat();
}
yyyy/MM/dd 也可以 yyyy-MM-dd 看你高兴。
请参考!


#9


呵呵一个问题,到处发贴

#10


zsjzwj(北极熊)是正确的!

#11


我看不懂上面代码,请高手明示: