WindowsプログラマのWebアプリへの挑戦日記。あとパンとか。

日付データをCOleDateTimeに変換する

4月 16th, 2008 Posted in C++

iTunesのライブラリファイル(iTunes Music Library.xml)を解析してゴニョゴニョしたいなぁと思って、VC6で解析ツールを作っています。

その中で、[2008-04-14T08:49:55Z]というgmtの書式で表される日時同士を比較したいがために、COleDateTimeに変換する関数を作りました。

値のチェックとかは省略してますよ。
言語はC++です。

  1. BOOL ConvStrToDate( LPTSTR pstrDate, COleDateTime& dateTime )
  2. {
  3.     if( !pstrDate ){
  4.         return FALSE;
  5.     }
  6.  
  7.     char sep[] = "-:TZ";
  8.     char* token = NULL;
  9.    
  10.     std::vector<std::string> vDateString;
  11.     token = strtok( pstrDate, sep );
  12.     vDateString.push_back( token );
  13.     while( token ){
  14.         token = strtok( NULL, sep );
  15.         if( token ){
  16.             vDateString.push_back( token );
  17.         }
  18.     }
  19.  
  20.     if( !vDateString.size() ){
  21.         return FALSE;
  22.     }
  23.  
  24.     char *stopstring;
  25.  
  26.     const int year = (int)strtol( vDateString[ 0 ].c_str(), &stopstring, 10 );
  27.     const int month = (int)strtol( vDateString[ 1 ].c_str(), &stopstring, 10 );
  28.     const int day = (int)strtol( vDateString[ 2 ].c_str(), &stopstring, 10 );
  29.     const int hour = (int)strtol( vDateString[ 3 ].c_str(), &stopstring, 10 );
  30.     const int min = (int)strtol( vDateString[ 4 ].c_str(), &stopstring, 10 );
  31.     const int sec = (int)strtol( vDateString[ 5 ].c_str(), &stopstring, 10 );
  32.  
  33.     dateTime.SetDateTime( year, month, day, hour, min, sec );
  34.  
  35.     return TRUE;
  36. }

なんかまずいところがあればご指摘お願いシマス!

こちらもオススメ!

Trackback URL

  1. 2 Responses to “日付データをCOleDateTimeに変換する”

  2. By sora on 4月 16, 2008

    (ruby で、、てのはなし?(^^;)

    ものすっごどーでも良いことですが、
    ざっと見た感じでは、

    >if( !vDateString.size() ){

    のところは

    if( vDateString.empty() ){

    のが良いのではないかと。。。

    http://www.geocities.jp/ky_webid/cpp/library/002.html

    しかし、久しぶりに c++ のコード見ました!
    なんだかうれしい。

  3. By ヨスケ on 4月 17, 2008

    あれ、ほんとだ。
    なんでsize()とかやってんだろ。
    やー実は元コードはこのsizeを後で使ってたんですけど、言い訳ですね。
    すみません。

    なんかブログ書くネタがなくて、無理矢理業務ネタを入れてみました。

Post a Comment