获得的日期、时间怎么转化成字符串呢、

cnblackmamba 2013-07-09 10:47:20
我想获得的字符串格式是“年-月-日 时:分:秒”,用的是sprintf,也用了那个strftime,可是时分秒中间一写成‘:’程序就出错,如果把':'换成其他字符就正常。求解惑,谢谢大家
char name[32];
t=time(NULL);
st=localtime(&t);
//strftime(name, sizeof(name), "%Y-%M-%D %H:%M:%S", st);
sprintf(name,"%d-%02d-%02d %2d:%2d:%2d",st->tm_year+1900,st->tm_mon+1,st->tm_mday,st->tm_hour,st->tm_min,st->tm_sec);
...全文
205 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-02-21
  • 打赏
  • 举报
回复
文件名中不能用的字符: :\?*/"<>?| \n\r\0
mujiok2003 2013-07-10
  • 打赏
  • 举报
回复
什么错误??
mujiok2003 2013-07-10
  • 打赏
  • 举报
回复
http://www.cplusplus.com/reference/ctime/asctime/
cnblackmamba 2013-07-10
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
仅供参考
#include <stdio.h>
#include <stdlib.h>
     ...
    return 0;
}
//1-78行添加到你带main的.c或.cpp的那个文件的最前面
//81-85行添加到你的main函数开头
//89-93行添加到你的main函数结束前
//在要写LOG的地方仿照第87行的写法写LOG到文件MyLog1.log中
首先先感谢这位大神的多次帮助,这次的问题,你给的指导怎么说呢、、、真的是太巧了、正在写一个日志函数、遇到的这个问题。有些不解的问题是: 1、我准备每运行一次程序,生成一个日志文件,文件名就是“年-月-日 时:分:秒.log”,这次提问的问题就是在生成文件名用冒号的时候程序就出错了。如果把文件名中的':'换成'-',这时写入日志内容中用到的“年-月-日 时:分:秒”格式的时候也都正常,程序正常;如果文件名中用':',我设断点调试了一下,错误反而是在写入日志内容的语句那里出错,下边语句: fprintf(fp,"%d %d-%d-%d %2d:%2d:%2d\n",index,st->tm_year+1900,st->tm_mon+1,st->tm_mday,st->tm_hour,st->tm_min,st->tm_sec);
赵4老师 2013-07-10
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef WIN32
    #include <windows.h>
    #include <io.h>
#else
    #include <unistd.h>
    #include <sys/time.h>
    #include <pthread.h>
    #define  CRITICAL_SECTION   pthread_mutex_t
    #define  _vsnprintf         vsnprintf
#endif
//Log{
#define MAXLOGSIZE 20000000
#define MAXLINSIZE 16000
#include <time.h>
#include <sys/timeb.h>
#include <stdarg.h>
char logfilename1[]="MyLog1.log";
char logfilename2[]="MyLog2.log";
static char logstr[MAXLINSIZE+1];
char datestr[16];
char timestr[16];
char mss[4];
CRITICAL_SECTION cs_log;
FILE *flog;
#ifdef WIN32
void Lock(CRITICAL_SECTION *l) {
    EnterCriticalSection(l);
}
void Unlock(CRITICAL_SECTION *l) {
    LeaveCriticalSection(l);
}
#else
void Lock(CRITICAL_SECTION *l) {
    pthread_mutex_lock(l);
}
void Unlock(CRITICAL_SECTION *l) {
    pthread_mutex_unlock(l);
}
#endif
void LogV(const char *pszFmt,va_list argp) {
    struct tm *now;
    struct timeb tb;

    if (NULL==pszFmt||0==pszFmt[0]) return;
    _vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);
    ftime(&tb);
    now=localtime(&tb.time);
    sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
    sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );
    sprintf(mss,"%03d",tb.millitm);
    printf("%s %s.%s %s",datestr,timestr,mss,logstr);
    flog=fopen(logfilename1,"a");
    if (NULL!=flog) {
        fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);
        if (ftell(flog)>MAXLOGSIZE) {
            fclose(flog);
            if (rename(logfilename1,logfilename2)) {
                remove(logfilename2);
                rename(logfilename1,logfilename2);
            }
        } else {
            fclose(flog);
        }
    }
}
void Log(const char *pszFmt,...) {
    va_list argp;

    Lock(&cs_log);
    va_start(argp,pszFmt);
    LogV(pszFmt,argp);
    va_end(argp);
    Unlock(&cs_log);
}
//Log}
int main(int argc,char * argv[]) {
    int i;
#ifdef WIN32
    InitializeCriticalSection(&cs_log);
#else
    pthread_mutex_init(&cs_log,NULL);
#endif
    for (i=0;i<10000;i++) {
        Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);
    }
#ifdef WIN32
    DeleteCriticalSection(&cs_log);
#else
    pthread_mutex_destroy(&cs_log);
#endif
    return 0;
}
//1-78行添加到你带main的.c或.cpp的那个文件的最前面
//81-85行添加到你的main函数开头
//89-93行添加到你的main函数结束前
//在要写LOG的地方仿照第87行的写法写LOG到文件MyLog1.log中
赵4老师 2013-07-10
  • 打赏
  • 举报
回复
关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
boviecly 2013-07-09
  • 打赏
  • 举报
回复
#include <unistd.h> #include <time.h> #include<stdio.h> #include <string.h> int main(void) { time_t secs=time(NULL); struct tm *lt; lt=localtime(&secs); char buf[32]; // strftime(buf,32,"%Y-%m-%d %T",lt);//第一种 strftime(buf,32,"%Y-%m-%d %H:%M:%S",lt);//第二种方法 printf("%s\n",buf); return 0; } a@ubuntu:~$ gcc time.c a@ubuntu:~$ ./a.out 2013-07-09 08:22:22 LZ的方法是对的,可能自己字符写的时候,有可能写成中文什么。
qzf362269994 2013-07-09
  • 打赏
  • 举报
回复
。。。gcc下你的代码一写成:正常通过能输出
cnblackmamba 2013-07-09
  • 打赏
  • 举报
回复
顶下、顶下、

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧