很郁闷的一件事情,如果Windows操作系统的默认显示的日期格式为yyyy-MM-dd时,软件可以正常使用,而一但遇到操作系统的默认显示日期的格式为MM/dd/yyyy软件就不能正常工作了.只有到windows的区域设置将日期格式改为yyyy-MM-dd才能正常使用,这样操作起来很麻烦(因为我软件中是按yyyy-MM-dd这种格式设置的.)
请问高手们有没有办法解决.或者如何获取系统的日期格式.

解决方案 »

  1.   

    转换日期格式
    formatdatetime('yyyy-mm-dd',now())
      

  2.   

    获取系统的日期格式:
    DateSeparator:    -
    ShortDateFormat:  yyyy-MM-dd
    LongDateFormat:   yyyy'年'MM'月'dd'日' dddd
    TimeSeparator:    :
    TimeAMString:     上午
    TimePMString:     下午
    ShortTimeFormat:  hh:mm
    LongTimeFormat:   hh:mm:ss
      

  3.   

    DateTimePicker1.datetime:=strtodate(FormatDatetime('yyyy-mm-dd',DateTimePicker1.datetime));
    按照上面的语句总是出错的(因为系统日期格式是:MM/dd/yyyy,),只有将系统日期格式改为:yyyy-mm-dd后,上面的语句才通过.感谢:dulei115(前途无亮) 的提示.请问怎么做才能让软件中的yyyy-mm-dd去适应系统的MM/dd/yyyy的这种格式?
    谢谢
      

  4.   

    直接赋值不行吗?DateTimePicker1.datetime := DateTimePicker1.datetime;
    -----------------------------------
    DateTimePicker1.datetime:=strtodate(FormatDatetime(StringReplace(ShortDateFormat, 'MM', 'mm', []),DateTimePicker1.datetime));
      

  5.   

    非常感谢:dulei115(前途无亮)的帮助,我已经受到了很大的启发.但还有点不太懂,比如我需要将DateTimePicker1.datetime的日期设置为本月的1日,我用下面语句还有出错:procedure TForm1.Button5Click(Sender: TObject);
    var
      Year,Month,Day: Word;
    begin
      DecodeDate(now,Year, Month, Day);
      DateTimePicker1.date:=strtodate(inttostr(year)+'-'+inttostr(month)+'-01');
    end;
    因为系统日期的格式有多种(如:yyyy/MM/dd;yyyy-M-d;yy-M-d;yy/M/d;yy/MM/dd;yy.MM.dd等等),所以说上面的语句必需使用系统格式来设置来能通过.再次请教!
    谢谢!!!
      

  6.   

    本月的1日
    DateTimePicker1.Date := IncDay(Now, 1 - DayOfTheMonth(Now));
    ------------------------------------------------------------------
    如果LZ非得要用StrToDate,那这样
    var
      Year, Month, Day: Word;
      s: String;
    begin
      DecodeDate(Now,Year, Month, Day);
      s := ShortDateFormat;
      s := StringReplace(s, 'yyyy', FormatFloat('0000', Year), []);
      s := StringReplace(s, 'yy', FormatFloat('00', Year div 100), []);
      s := StringReplace(s, 'MM', FormatFloat('00', Month), []);
      s := StringReplace(s, 'M', FormatFloat('0', Month), []);
      s := StringReplace(s, 'dd', '01', []);
      s := StringReplace(s, 'd', '1', []);
      DateTimePicker1.date:=StrToDate(s);
    end;
      

  7.   

    不使用Delphi自带的日期函数。
    使用API函数中的GetSystemTime(&ST)或GetLocalTime(&st),
    st指向SYSTEMTIME的结构,这样出来的日期和时间想怎么转换就可以转换。
      

  8.   

    各位都没有说道点子上,正确方法如下:program pjtName;uses
      Forms,
      aaa in 'aaa.pas' ,
      bbb in 'bbb.pas';{$R *.res}begin
      Application.Initialize;
      //加上这2行代码即可解决问题
      DateSeparator := '-';
      ShortDateFormat := 'yyyy-mm-dd';//或者'm/d/yyyy',等
      //  Application.CreateForm(Taaa, aaa);
      Application.Run;
    end.
      

  9.   

    uses 
      ...,
      SysUtils;
      

  10.   

    另外保险起见,在程序中遇到日期处理时,应该formatDateTime成一致的格式,烦是烦点,但是一种良好的编码习惯。