[请问]怎么将一个字符串 转换为时间格式
[请教]如何将一个字符串 转换为时间格式
我把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实现比较容易。
我把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("解析错误.");
}
}