【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18574

日付と時刻の書式指定
投稿者---aki(2004/12/08 11:34:43)


よろしくお願い致します。
ある時点でミリ秒まで取得した現在時刻を、あとで使いたいのですが書式を変更することができません。
例)20041208112530780→2004/12/08 11:25:30.780
両方ともファイルに書き込みたいので必要です。
ミリ秒までの取得はできましたが書式指定子を使っての変更ができません。
文字列として取るべきでしょうか?ご教示よろしくお願いします。
ソースは以下です。

int main()
{
   char buf[256];
   struct timeval tv;
   struct tm *tmptr = NULL;
   unsigned long LTime;
   
   //ミリ秒まで取得
   gettimeofday(&tv, NULL);
   //tm構造体(日本時間)への変換
   tmptr = localtime(&tv.tv_sec);

   sprintf(buf, "%04d%02d%02d%02d%02d%02d%3d\n",
            tmptr->tm_year + 1900, tmptr->tm_mon + 1,
            tmptr->tm_mday, tmptr->tm_hour,
            tmptr->tm_min, tmptr->tm_sec,
            tv.tv_usec/1000);
    
   sprintf(LTime, "%04d%02d%02d%02d%02d%02d%3d\n",
            tmptr->tm_year + 1900, tmptr->tm_mon + 1,
            tmptr->tm_mday, tmptr->tm_hour,
            tmptr->tm_min, tmptr->tm_sec,
            tv.tv_usec/1000);
            
   printf("%s",buf);
              
   //printf("%04d/%04d/%2d %02d:%02d:%02d.%d",buf);
   printf("%4s/%2s/%2s%2s:%2s:%2s.%s",buf);
   return 0;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:日付と時刻の書式指定 18575 かずま 2004/12/08 11:59:29


No.18575

Re:日付と時刻の書式指定
投稿者---かずま(2004/12/08 11:59:29)


gettimeofday を使うということは、Unix か Cygwin?
#include <stdio.h>
#include <sys/time.h>

int main(void)
{
    struct timeval tv;
    struct tm *tp;
    
    gettimeofday(&tv, NULL);
    tp = localtime(&tv.tv_sec);
    printf("%04d/%02d/%02d %02d:%02d:%02d.%03d\n",
        tp->tm_year + 1900, tp->tm_mon + 1, tp->tm_mday,
        tp->tm_hour, tp->tm_min, tp->tm_sec, tv.tv_usec/1000);
    return 0;
}



この投稿にコメントする

削除パスワード

No.18576

Re:日付と時刻の書式指定
投稿者---aki(2004/12/08 12:20:54)


かずまさん、レスありがとうございます。
>gettimeofday を使うということは、Unix か Cygwin?
環境を明記せず、失礼致しました。
そうです。UNIXなのでとりあえずCygwinを使っております。
参考にさせて頂きます。
ありがとうございました。


この投稿にコメントする

削除パスワード

No.18578

Re:日付と時刻の書式指定
投稿者---かずま(2004/12/08 13:33:12)


> そうです。UNIXなのでとりあえずCygwinを使っております。

Cygwin は Windows 上に Unix 環境を実現するものなので、その答えは
変なのではありませんか? Unix なら、Linux だとか、FreeBSD、Solaris
などで、Cygwin なら、OS は Windows だと思うのですが、....。

さて、質問の趣旨が時刻を文字列(連続した数字の列)で憶えておいて、
あとで書式を変更したいというのであれば次のようになるでしょう。
#include <stdio.h>
#include <sys/time.h>

int main(void)
{
    struct timeval tv;
    struct tm *tp;
    char buf[20];
    int year, month, day, hour, min, sec, msec;
    
    gettimeofday(&tv, NULL);
    tp = localtime(&tv.tv_sec);
    sprintf(buf, "%04d%02d%02d%02d%02d%02d%03d",
        tp->tm_year + 1900, tp->tm_mon + 1, tp->tm_mday,
        tp->tm_hour, tp->tm_min, tp->tm_sec, tv.tv_usec/1000);

    printf("%.4s/%.2s/%.2s %.2s:%.2s:%.2s.%s\n",
            buf, buf+4, buf+6, buf+8, buf+10, buf+12, buf+14);
    sscanf(buf, "%4d%2d%2d%2d%2d%2d%d",
            &year, &month, &day, &hour, &min, &sec, &msec);
    printf("%04d/%02d/%02d %02d:%02d:%02d.%03d",
            year, month, day, hour, min, sec, msec);
    return 0;
}



この投稿にコメントする

削除パスワード

No.18589

Re:日付と時刻の書式指定
投稿者---aki(2004/12/08 16:48:27)



printf("%.4s/%.2s/%.2s %.2s:%.2s:%.2s.%s\n",
buf, buf+4, buf+6, buf+8, buf+10, buf+12, buf+14);
sscanf(buf, "%4d%2d%2d%2d%2d%2d%d",
&year, &month, &day, &hour, &min, &sec, &msec);
printf("%04d/%02d/%02d %02d:%02d:%02d.%03d",
year, month, day, hour, min, sec, msec);

なるほどと思いました。かずまさんどうもありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧