[请问]怎么将一个字符串 转换为时间格式

[请教]如何将一个字符串 转换为时间格式

我把DateTimePicker中的日期时间通过FormatDateTime格式成“20140321181920”
Edit4->Text=FormatDateTime("yyyyMMddHHmmss",DateTimePicker->DateTime);

现在想把字符串“20140321181920”,反着转换回去,转换成2014-03-21 18:19:20
ShowMessage(DateTimeToStr(StrToDateTime("20140321181920")));
结果就报"20140321181920"不是一个日期或者时间格式。

修改代码成
ShowMessage(DateTimeToStr(StrToDateTime("2014-03-21 18:19:20")));
返回结果就正常了

问题:现在就想请教下字符串“20140321181920”,有没有便捷的方法格式成"2014-03-21 18:19:20",然后就可以通过DateTimePicker->DateTime=StrToDateTime(Edit8->Text)直接写入。
或者其他方法用字符串“20140321181920”,将DateTimePicker日期时间变更为字符串中的时间?




------解决方案--------------------
试试:

DateTimePicker->Format= "YYYYMMDDHHNNSS";

可以在设置时完成 即将 DateTimePicker 的 Format 属性 改成 YYYYMMDDHHNNSS
------解决方案--------------------
DateTImePicker控件类里有方法可以提取年月日时分秒的,

int year, month, day, hour, min, sec, msec;

DateTimePicker->Date.DecodeDate(&year &month, &day);
DateTImePicker->Time.DeocdeTime(&hour, &min, &sec, &msec);

然后使用格式化输出就好了。

AnsiString astr;

astr.sprintf("%04d-%02d-%02d, %02d:%02d:%02d", year, month, day, hour, min ,sec, msec);

然后把这个字符串赋给任何你想输出的地方就OK了,比如Label上,或者Memo上,或者是其它任意地方。

Label->caption = astr; //VCL库下
Lable->text = astr;//FireMonkey库下
------解决方案--------------------
楼上会错意了。楼主要的是把“20140321181920”这样的非时间格式的字符串分解,并转换成时间格式。sprintf是不行的,恰好相反,应该用sscanf实现比较容易。

#include <stdio.h>

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String str = "20140321181920";
    int y, m, d, h, n, s;
    int nCount = sscanf(str.c_str(), "%4d%2d%2d%2d%2d%2d", &y, &m, &d, &h, &n, &s);
    if (nCount == 6)
    {
        TDateTime dt = EncodeDate(y, m, d) + EncodeTime(h, n, s, 0);
        ShowMessage(dt);
    }
    else
    {
        ShowMessage("解析错误.");
    }
}