• ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

正攻法としては、tm構造体を設定してからmktime関数を呼び出します。 tm構造体にはいろいろなフィールドがありますが、年月日と時分秒だけ設定すれば、後は不定でも大丈夫です。(念のため0で初期化しておきましょう)

mot1177
質問者

お礼

ありがとうございます。 tm型に個別に値を格納できるのを忘れていました。 助かりました。

関連するQ&A

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

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

  • 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(C#2.0)からSQLServer2008R2のストアドプロシージャをコールする際、暗黙の型変換を使うとパフォーマンスが落ちるらしいので、全て明示的な型変換に修正したいと思っています。 MySQLをselectした値をリーダー(reader)に格納し、SQLServerにストアドコール時にパラメータ指定してinsertするのですが、何が暗黙的で何が明示的なのかわかりません。 下記は引数1にパラメータ、引数2にDBType(省略可)、引数3に値を指定しています。 [暗黙的かと思われるパラメータの渡し方] AddParameter("@パラメータ1", reader["値1"]); //char(2) AddParameter("@パラメータ2", DbType.string, reader["値2"].ToString()); //nvarchar(20) [明示的かと思われるパラメータの渡し方] AddParameter("@パラメータ3", DbType.DateTime, Convert.ToDateTime(reader["値3"])); //datetime AddParameter("@パラメータ4", DbType.Currency, (Convert.ToDecimal(reader["値4"])) * 100); //money 暗黙の型変換とは、引数3の型を指定しない場合に起こるという認識で合っていますでしょうか?

  • 特定のタイムゾーンからtime_tを得る方法

    こんにちは。 サポートが終わってしまったVC++6.0で開発した案件の改造を行っています。OSはWindowsXPです。 その中で、time_t(32ビット)をインタフェースとするライブラリを使う必要が要件上あるのですが、その元になる日時情報が、世界各地のログ情報の中の日時情報で、その形式が各地のタイムゾーンによる文字列("2012/03/21 12:34:56")になっていています。各ログがどのタイムゾーンかは分かるので、TzSpecificLocalTimeToSystemTime関数を使えばUTCのSYSTEMTIME構造体には変換できそうなのですが(マニュアルを見ただけで試してはいません)、それをtime_tに変換する方法が分からず、困っています(mktimeなどは変換元をローカルタイムとして扱うため)。自分で計算するライブラリでも結構ですので、何か良い変換方法がありましたら、ぜひご教授頂きたいのですが。 またVC++6.0なので、.NET Frameworkを使わない方法での対応で考えております。 よろしくお願い致します。

  • CStringをwchar_tに変換したい

    CStringをwchar_tに変換したく思い、ネットで探したところ、 http://msdn2.microsoft.com/ja-jp/library/ms235631(VS.80).aspx のページを見つけたので、下記のプログラムを組んで実行してみましたがエラーになって しまいます。 【プログラム】 CString orig("Hello, World!"); // Convert to a char* const size_t newsize = 100; // Convert to a wchar_t* // You must first convert to a char * for this to work. size_t origsize = strlen(orig) + 1; size_t convertedChars = 0; wchar_t wcstring[newsize]; mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); 【エラー】 error C2664: 'strlen' : 1 番目の引数を 'CString' から 'const char *' に変換できません。 error C2664: 'mbstowcs_s' : 4 番目の引数を 'CString' から 'const char *' に変換できません。 &CStrinをconst char *でキャストしてもうまくいきません。 どこがおかしいのでしょうか? 【環境】 WindowsXP+VC++2005

  • 日付、文字列変換に関して

    日付、文字列変換に関して 文字列の日付に対し、プラス1ヶ月した後、また文字列に戻すような 仕掛けを考えています。 そこで、以下のような記述をしましたが、どうも最後の文字列への変換が うまくいきません。 何が原因でしょうか。。。 DateTime A_time; DateTime B_time; string AFormat; AFormat = "yyyyMM"; A_time = DateTime.ParseExact("201012", AFormat, null); B_time = A_time.AddMonths(1); string C_time = B_time.ToString("YYYY/MM"); 初歩的な内容で申し訳ありませんが、よろしくお願いします。

  • MySQLのDatetime型の引き算

    ある機械の1日当たりの処理数を計算したいと思います。 Datetimeの引き算がうまくいかないので、解決方法を教えてください。 1日当たりの処理数は下記の式で計算できます。 1日当たりの処理数=期間内処理数÷((現在日時-作業開始日時)÷(60×60×24)) ※現在日時-作業開始日時で期間の秒数を計算 それを1日の秒数=86400秒(60秒×60分×24時間)で割る。 ------------------ 環境 MySQL:5.0.77 ------------------ テーブル: test カラム :num(INT型),start_date(DATETIME型) ※numは期間内の機械の処理数です。 まず、上記の1日当たりの処理数の数式をSQL文に反映させてみました。 SELECT num , num/((now()-start_date)/86400) as shorisu FROM test 結果は表示されるのですが、かなり大きな数値になって出てきてしまいます。 WEBで情報を検索したところ、DATETIME型を直接減算すると求める結果にならないことはわかりました。 MySQLのページ(11.5. 日付時刻関数) http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html を見てみましたが、どの関数を使えばよいのかいまいちわかりません。 now()-start_dateの部分が正しい値を返すようになれば良いのですが、どのような式を書けばよいのでしょうか?

    • ベストアンサー
    • PHP
  • C#で型変換

    DataTable T_DATATABLE = new DataTable(); DataRow[] T_DATATABLE_row; DataAdapter adp = new DataAdapter("SELECT id,Date FROM TABLE", CONN); adp.Fill(T_DATATABLE); //データテーブルにidとDateフィールドがあります。 //dtに下記で取得したダータを入れようと思っているのですが、 //System.Datetimeに変換することはできませんと表示されます。 DateTime dt = T_DATATABLE.Rows[0]["Date"]; どのようにすれば、型変換をすることができるでしょうか? string dt = (string)T_DATATABLE.Rows[0]["Date"]; string dt = (string)T_DATATABLE.Rows[0]["Date"].toString; としてもできません・・・ ご教授お願い致します!

  • クラスの変換について

    C#のクラスの変換についてお尋ねします。 switch文を使ってstring型で受けた値を int型に変換したいのですが、 下記コードの ” Convert.ToInt32(bloodType) ” のところでエラーになります。 どうすればint型に変換できるでしょうか? どなたか宜しくお願い致します。 string bloodType = ""; switch(bloodType) { case "A型": bloodType = "1"; break; case "B型": bloodType = "2"; break; case "O型": bloodType = "3"; break; case "AB型": bloodType = "4"; break; } int bloodTypeId = Convert.ToInt32(bloodType);

  • VC++  System::Stringに変換するには?

    現在VisualC++ ExpressEditionを使って、C++の勉強をしながら万年カレンダーを作ろうとしていています。 ひとまずカレンダーの表示に使う月・日・曜日をDateTime::Nowから取り出したいのですが、 DateTime d1 = DateTime::Now.AddMonths; label1->Text = d1.ToShortTimeString; と試しにlabelに現在の月を表示させようとしたところ、 「1 番目の引数を 'System::String ^(__clrcall System::DateTime::* )(void)' から 'System::String ^' に変換できません。」 というエラーメッセージとともに弾かれてしまいます。 どこをどう変えればよいのか教えてください。 勉強を始めるのに買ってきた参考書では、DateTime::Now.ToLongTimeString;で日付から時刻まで繋げて表示する方法しか載っていませんでした(索引にもDateTime::Nowのみ) PCで検索しようとしても別の言語や参考書のHPが大量に引っかかって困っています。

専門家に質問してみよう