• 締切済み

サーバから取得したdatetime型の変換

いつもお世話になります。 初めて質問させていただきます。 初心者のため、不足の部分あるかと思いますが どうぞよろしくお願いいたします。 SQLServer2000サーバからSQLによるデータ取得を行いファイルに出力し、 そのファイルの内容を違うサーバに送るという課題があります。 そのうちサーバからデータを取得してファイルに出力するまでが 現在の私の担当部分になります。 その取得するデータの中にdatetime型の項目が存在しています。 これをファイル出力するためにchar型に変換を行いたいのですが、 良い方法が思いつきません。 time_t型からtm型に変換してそこからchar型に変換することを考えたのですが、 取得してきた項目自体をtime_t型に変換する根本の方法が わかりません。 取得してきた項目はlong型の値になっているようですので long型からtime_t型への変換ができれば localtime関数を使用してtm型に変換できるのですが。 上記のような方法が無いのでしょうか。 また皆様の中で過去にdatetime型の項目取得を行った経験をお持ちの型が いらっしゃいましたら参考にお話いただけませんでしょうか。 上記で何か不足部分ございましたらご指摘ください。 よろしくお願いいたします。

みんなの回答

回答No.1

ざっと調べてみた範囲では…… ・SQL サーバーの datetime 型  2つの4バイト整数で表現される。  最初の4バイトは、日付の連番であり、0 のとき、1900/1/1  次の4バイトは、1日のうちの時刻を、1/300秒 単位でカウントしたもの ・Cの time_t 型  1970/1/1 00:00:00 からの通算秒数 ということのようですから、これから変換できそうです。 あと、SQL の方の関数で、YYYY-MM-DD の形で取得できるようです。 ※私は関わったことがないので、詳細はわかりません。

namake13
質問者

お礼

御回答いただきありがとうございました。 取得したデータをDBTIMESTAMP型のポインタで取得を行い、 年、月、日、時間・・・といったプロパティをchar型に編集しなおして取得することで解決をしました。 この方法を使用しないとミリ秒まで取得できなかったですね。 ちなみにfractionは1億桁あるので100万で割って算出しました。 ------------------------------------------------ dbTimeStamp.year dbTimeStamp.month dbTimeStamp.day dbTimeStamp.hour dbTimeStamp.minute dbTimeStamp.second dbTimeStamp.fraction ------------------------------------------------

関連するQ&A

  • datetimeからDateTimeへ変換

    SQL Server 2005 ExpressとASP.NET 2.0(C#)を組み合わせて使っています。 SQL Serverのデータベースから取り出したdatetime型のデータをASP.NETのDateTime型に変換するには、どのようにすればよいのでしょうか?

  • .NET 2003 DateTimeからtime_t型への変換

    .NET 2003 C++です。 フォーム上にカレンダを置いて選択された日時をDateTime型で管理しています。 ところが、途中でどうしても使用しなければいけないクラスへの時間の引数がtime_t型なのです。 その為、DateTimeからtime_tへの変換を模索していますが、よくわかりませんでした。どなたかお知恵をおかしください。 Convertでは、Stringへの変換しか対応してません。 Stringからtime_tへの変換の仕方でもいいんですが。 ※ミリ秒は使用しません。

  • SQlServer 2000 :Datetime変換

    SQlServer 2000 のSQLでのDatetimeの変換方法 datatime型データの年月部分(YYYYMM) だけデータをつくりたいのですが、方法を教えてください。

  • C# LinqでDateTime型の値を取得

    C#でLinqを使用し、DateTime型の値を取得しようとしているですが、 DateTime型の変数に格納する際に、以下のようなエラーが発生してしまいます。 'System.DateTime?' を 'System.DateTime' に暗黙的に変換できません。 どうやらDBから取得したDateTimeの値が、「System.DateTime?」という型になっているようなのですが、原因は何でしょうか? また対応方法を教えてください。 尚、DBはSQL Server2005で.Net3.5です 宜しくお願いします。

  • VC++ DateTimeを使った現在時刻取得

    VC++(CLI)で、現在時刻をstd::string文字列として、取得しようとしています。 時刻取得に、DateTime::ToStringを使うと、System::String でしか取得できません。 DateTime dt = DateTime::Now; String^ st= dt.ToString("HH:mm:ss");                  ↑この形式で、std::string文字列を取り出したい。 System::String から std::stringへの変換は、単純なキャストではなく変換処理が必要なので、他の方法を探しています。 他に思いつくのは、標準関数のtime.h localtimeから変換する方法くらいですが、他にstd::stringで必d家を取得する方法があれば教えてください。 環境: Win7 VC++2010 Express

  • ASP.NET 2.0(C#) Datetime型

    サーバー日付を取得して、日付の部分のみを書き換えたいのですが、方法が分かりません。 どなたか教えていただけないでしょうか・・ ASP.NET 2.0(C#)です。 実現したい内容は Datetime dt = DateTime.now;(例えば 20080101...) string day = "28"; // dtの日付部分にdayの"28"を入れたいわけです。 Datetime dt2 = (20080128...にしたいです) 色々調べてみたのですが、まだまだ経験が浅いせいか、良い方法を見つけることが出来ません。 よろしくお願いします(>_<)

  • DateTime型の表示

    初心者です。教えて下さい PHP+Pearで検索取得して 文字列型、数値型は表示出来るのですが、 DateTime型の表示がされません。文字列に変換する必要があるのでしょうか?どうすればよいですか? よろしくおねがいします。 <?php //省略 print("更新日時:" . $data['updateddatetime'] ); //省略 ?>

    • ベストアンサー
    • MySQL
  • DateTimeを最初からString型にする方法

    DateTimeを最初からString型にする方法 こんにちは。C#のキャストについてお教え頂けませんでしょうか。 下記はファイルの作成日を取得し、それをstring型に変換しています。 FileInfo fi = new FileInfo(FILE); DateTime CreationTime = fi.CreationTime; string CreationTime2 = CreationTime.ToShortDateString(); DateTime型の変数に情報を格納した後に、String型の変数にキャストした情報を格納しています。 これでは二度手間なので、一度でできる方法はないでしょうか? 下記のコードは動きませんが、やりたいのは下記のようなことです。 String CreationTime = (string)fi.CreationTime; 最終的に何がしたいかというと ・データベースよりデータを取得しDataSetに格納 ・データセットの日付列の値を取得。日付列はvarchar型です。 ・日付列の値をstring型変数に格納 ・fi.CreationTimeで取得した日付とDataSetで取得した日付を比較 ・以上のような事をしたいと思っています。よってCreationTimeをString型に変換したいです 宜しくお願い致します!

  • 時刻取得について

    C言語において時刻取得を以下のようにプログラムしたら、プログラムを3回目以上実行すると前回時間内容が常に1回目が表示されてしまいます。どこを直せばちゃんと前回の時刻が正しく表示されるようになるのでしょうか。put()のfopenの"a"の部分は"w"に変えるだけで正しく実行されるのですが、これを"a"にした場合について正しく表示されるようにするということです。 #include <time.h> #include <stdio.h> void get(void); void put(void); char data_file[] = "time.dat"; int main(void) { get(); put(); return(0); } /* 前回の日付・時刻を読込む   */ void get(void) { FILE *fp; time_t t; struct tm *local; time(&t); local = localtime(&t); if ((fp = fopen(data_file, "r")) == NULL){ printf("\a本プログラムを実行するのは初めて\n"); }else { int year, month, day, h, m, s; fscanf(fp, "%d %d %d", &h, &m, &s); printf("前回は%d時%d分%d秒\n", h, m, s); fclose(fp); } } /* 今回の日付・時刻を書き込む   */ void put(void) { FILE *fp; time_t t; struct tm *local; time(&t); local = localtime(&t); if ((fp = fopen(data_file, "a")) == NULL) printf("\aファイルをオープンできません。\n"); else { printf("現在の日付・時刻を書き出しました。\n"); fprintf(fp, "%d %d %d\n", local->tm_hour, local->tm_min, local->tm_sec ); fclose(fp); } }

  • datetime型でNULL値を入れたい。

    現在SQLserver上で、、CSVを一時テーブルに保管し、ある条件に合致する行のみTBLに追加するというストアドを書いています。そのTBLには「datetime型」の列があります。 この作業で、2点問題が発生しています。 (1)CSVファイルから一時テーブルにデータを入れようとすると、datetime列がNULLの場合、型の不一致でエラーが発生します。 (2)上記において、一時テーブルの型をとりあえずvarcharにしておくと入れれるのですが、TBLに追加しようとする際、「convert(datetime,変数)」としているのですが、上手くキャストしてくれません。(「文字列から日付への変換に失敗しました」のような文がでます) どのようにすれば、NULLでもdatetimeに入れられるのでしょうか?教えてください。