dephi中TryStrToDateTime 怎样在C++Builder中实现?

判断一个字符串是否能转成日期类型的数据,不用IsDateTime类的try()…catch()函数,怎么写呢?

这样有问题的!
我只要知道这个字符串能不能转换成时间类型?
StrToDateTime("…"); 一旦转换不行,系统会报错,我不需要系统报错!

C/C++ code
//头文件SysUtils AnsiString str = "2008-12-02 14:20:00"; TDateTime stime; if (TryStrToDateTime(str , stime)) { ShowMessage("YES"); } else { ShowMessage("NO"); }

没人会?

    TDateTime date = Now();
    bool flag = TryStrToDateTime("2008/11/11", date);
    ShowMessage(BoolToStr(flag));
    ShowMessage(DateTimeToStr(date));

然後去抓flag值
如果flag為true 則轉化成功 date就是now的值
如果flag為false 轉化失敗  date為默認值2008/11/11

    TDateTime date = Now();
    bool flag = TryStrToDateTime("2008/11/11", date);
    if(flag)
    {
        ShowMessage("OK");    //轉換完成 此時date為2008/11/11
    }
    else
    {
        ShowMessage("error");    //轉換完成 此時date為Now()的值
    }

C++builder中没有TryStrToDateTime????????????

我找不到函数TryStrToDateTime,出错啦

引用 7 楼 sailorcgh 的回复:
C++builder中没有TryStrToDateTime????????????

看了3楼的例子没?BCB代码。

    TDateTime date = Now();
    bool flag = TryStrToDateTime("2008/11/11", date);
    if(flag)
    {
        ShowMessage("OK");    //轉換完成 此時date為2008/11/11
    }
    else
    {
        ShowMessage("error");    //轉換完成 此時date為Now()的值
    }

這個就是bcb裏的用法阿

编译时出错,没有TryStrToDateTime这个函数

#include "SysUtils.hpp"
刚才都提醒你头文件了……

#include <SysUtils.hpp>
加这个看一下

c++builder5.0中没有这个函数,怎么解决?

在bcb6.0中 其實是不需要#include <SysUtils.hpp>這句的
如果你用的是bcb 5.0可以看看幫助文件 看SysUtils.hpp是否有TryStrToDateTime這個函數
delphi裏有的bcb裏應該會有的
如果實在不行
那就用try catch去判斷一下

bcb 5.0中SysUtils.hpp没有TryStrToDateTime這個函數

bcb 6.0中SysUtils.hpp有TryStrToDateTime這個函數

在bcb 5.0中使用try catch 有问题,StrToDateTime会自动调用出错信息的

那就找个BCB6.0的SysUtils.hpp去覆盖掉。
做好5.0中原先SysUtils.hpp的备份,出问题再换上去。

你說的調用try catch有問題是在調試狀態下跑的吧
如果只運行exe是不會出那個錯誤信息的 這個你可以試一下

另外 如果你是在不想用try catch 又沒有trystrtodatetime這個函數, 又不想出異常

    TDateTime dt = StrToDateTime("1900-01-01");    //這個日期應該沒有人用吧
    if(StrToDateDef("xxxx-xx-xx",dt) != dt)   
    {

    }
    else
    {

    }

StrToDateDef這個函數是把xxxx-xx-xx轉成日期類型 如果不成功就設置成default值"1900-01-01"所以在轉好后判斷是否被強制轉成了"1900-01-01"就可以知道結果了

C/C++ code
//如果有StrToDateTime 可以自己模仿写个TryStrToDateTime呀 //在IDE里面测试,如果遇到不能转为DateTime的字符串,本函数还是爆出异常的 //在外面运行就不会了 bool TryStrToDateTime(AnsiString &strDateTime,TDateTime& datetime) { bool bResult = false; try { datetime =StrToDateTime(strDateTime); bResult = true; } catch(…) { // ……. } return bResult ; //返回false 表示转换未成功 }

bcb 5.0中没有StrToDateDef这个函数,呜呜。。。

哭什么哭,以上那么多解决方案为什么不试试。喊着没有就解决问题了?

引用 20 楼 sailorcgh 的回复:
bcb 5.0中没有StrToDateDef这个函数,呜呜。。。

沒有用過bcb 5.0
這些函數都沒有?
那建議你還是用try catch吧 其實挺好用的 不要在調試狀態下跑 直接跑exe是不會出異常的
如果還是不想用
那建議你自己寫個判斷吧判斷一個字符串是否是日期 或者直接安裝bcb 6.0