アプリケーションの実行にMS VC++ 2008を使用してCでCtime()
を実装する際に、1つの問題が発生しました。CからMysqlへのデータ型の互換性
ctime
を使用すると、現在の時刻形式はとなります。日Jan 09 14:38:09 2011となります。上記の形式を変換する方法はありますか?2012-01-09 14:38:09(in MYSQL) Cに直接的な機能はありますか?
これを行うための提案はありますか?
アプリケーションの実行にMS VC++ 2008を使用してCでCtime()
を実装する際に、1つの問題が発生しました。CからMysqlへのデータ型の互換性
ctime
を使用すると、現在の時刻形式はとなります。日Jan 09 14:38:09 2011となります。上記の形式を変換する方法はありますか?2012-01-09 14:38:09(in MYSQL) Cに直接的な機能はありますか?
これを行うための提案はありますか?
あなたのtime_t
localtime()
(またはgmtime()
)とstruct tm
に変換することができ、その後、あなたが好きな日付をフォーマットするstrftime()
を使用しています。
例:
char out[20];
time_t t0 = time(0);
struct tm *tm0 = localtime(t0);
strftime(out, sizeof out, "%Y-%m-%d %H:%M:%S", tm0);
異なるデータベースの列に異なるtime_t
値が必要な場合は、それらを作成します。
次に、struct tm
に変換し、それぞれ上記のようにフォーマットします。
例:
time_t t0 = time(0); /* now */
time_t t1 = t0 + 3600; /* 1 hour from now */
time_t t2 = t0 + 24*3600; /* 1 day (24 hours) from now */
man ctime()
によれば
:
いるasctime()とはmktime()関数の両方の引数表現が 年、月、日に分離され、壊れたダウン時間を表す 、等を取る
私はあなたが望むことをするためにこれらの他の機能を使うことができると思います。
Cには1つもありません。mktime(またはmktime_r)とsprintfを使用して独自の時刻形式を作成します。
sprintf()ではなくprintf() –
@Pete:もちろん。 –
私の意見では、この(または他の)不一致を処理する唯一の方法は、time()によって返された生の値をテーブルに保存することです。どのアプリケーション(あなたも含む)にその値をユーザーに表示したい配置にフォーマットさせることができます。
このアプローチは、三回の大勝利を提供しています:
それはあなたが離れデシベルを与え、誰でも解釈できることを確認することと扱うことができることを意味し、普遍的なシンプル、かつ十分に文書化のtime_tフォーマットを利用していますあなたのためにそれ以上の仕事/ドキュメンテーションはありません。 struct tmとctimeのようなフォーマットは完全に任意で、30年前の深刻な深夜プログラマによって選択されました。
コードであったもので国際化を実装したいと思っている人が、あなたに向けられた嘲笑と怒りを避けることができます。
最も重要なのは、自分や他の誰かが並べ替え/選択できる形式で時間を保存することです。これは他のものには当てはまりません。
あなたのテーブルは、あなたが作ることができるほど広く理解されていると私は信じています。生のtime_t値を保存することで、この目標を達成できます。
あなたは[ 'のlocaltime()'](httpで '構造体tm'にご' time_t'に変換することができます答えとして受け入れるようにOPを可能にするために、コメントからの投稿します: //pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html)(または['gmtime()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html))、 ['strftime()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html)を使用して日付を書式設定します。 – pmg
ありがとうpmg.urのアイデアは働いていました。もう1つの疑問。私は3つのフィールドに現在の時刻を挿入したいと思っています。しかし、3つのタイミングはわずかに異なるはずです。今私は3つすべてのfiledsが同じtiming.eg:12:05,12:08,12:10..これを含むことができますか? – user1140755
3種類の 'time_t'値を取得します。それらを 'struct tm'に変換し、それぞれを必要に応じてフォーマットします。例: 'time_t t0 = time(0); time_t t1 = t0 + 3600; time_t t2 = t0 + 24 * 3600; – pmg