用C++ 语言获取本地时间格式如:12-25-13 10:38:01

要求时间中时分秒为个位时自动补零,最好有源码

把整形时间转换成tm结构之后,就可以转换成自己想要的任意格式,示例代码:

#include <time.h>
#include <cstdio>
#include <iostream>

using namespace std;
/*把整形时间转换成字符串格式的时间*/
int TimeNumToStr(time_t time, char *pBuf)
{
    struct tm *tmT;
    tmT = localtime(&time);
    if (NULL == tmT)
    {
        //printf("tmT is NULL.time = %u.\n", time);
        return -1;
    }
    /*时间格式:月-日-年 时:分:秒*/
    sprintf(pBuf, "%02d-%02d-%02d %02d:%02d:%02d",           
        tmT->tm_mon  += 1,
        tmT->tm_mday,
        tmT->tm_year - 100,/*tm里的时间是从1900年到目前的年数,这里只显示两位,所以减100*/
        tmT->tm_hour,
        tmT->tm_min,
        tmT->tm_sec
        );    
    return 0;
}

int main(int argc, char *argv[])
{
    /*获取当前时间*/
    time_t tmNow = time(NULL);
    char cTmp[50] = {0};
    /*转换时间为指定格式*/
    TimeNumToStr(tmNow, cTmp);.
    /*输出结果*/
    cout<<cTmp<<endl;    
    return 0;
}

把TimeNumToStr函数拷贝到你的代码里,注意包含相关头文件,就可以了,测试结果:

追问

基本搞定了,这里 用 tmT->tm_year - 100就不对了,要用哪个能获取该年份的如2013,完毕马上采纳

追答

呵呵,你题目给定的年份分只有两位数,所以要减去100,如果是四位,就是你说的,加上1900就OK了^_^

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-25
char filename[40]={0};
SYSTEMTIME sys;
GetLocalTime( &sys );
sprintf_s(filename,"%04d_%02d_%02d %02d_%02d_%02d",.sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond);
用GetLocalTime函数就可以,上面代码没法输出12-25-13 10:38:01这种格式,-和:在sprintf_s函数里是非法字符,你自己根据上边的代码改改就可以了。希望可以帮到你。追问

我也是用这种方式获取的,可是不能自动补零当分秒为个位数的时候,小伙伴还有别的好办法吗?搞定加悬赏……

追答

%02d 就是自动补0的啊 我输出的就是带自动补0的(14:50:02)
要不你把你源码发我看看。

第2个回答  2013-12-25
//以下内容保存为 时钟test.cpp
/***********************************************************************************************/
#include <windows.h>#include <TCHAR.H>#include "resource.h"#include <stdio.h>
#define IDT_UPDATE 1
PTSTR KeepTheDoubleOfTime(DWORD Time,PTSTR szBuf)//保证时分秒自动补零
{ ((Time/10)>0) ? _stprintf(szBuf,TEXT("%d"),Time) :_stprintf(szBuf,TEXT("%c%d"),TEXT('0'),Time); return szBuf;}
BOOL CALLBACK DialogProc( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter){ switch(uMsg) { case WM_INITDIALOG: SetTimer(hwndDlg,IDT_UPDATE,1*1000,NULL); SYSTEMTIME Sm; TCHAR Timer[30]; GetSystemTime(&Sm); _stprintf(Timer,TEXT("%d年%d月%d日\n"),Sm.wYear,Sm.wMonth,Sm.wDay); SetDlgItemText(hwndDlg,IDC_STATIC_1,Timer); if(Sm.wDayOfWeek==0) _stprintf(Timer,TEXT("%s"),TEXT("星期日")); else _stprintf(Timer,TEXT("%d"),Sm.wDayOfWeek); SetDlgItemText(hwndDlg,IDC_STATIC_2,Timer);
break; case WM_TIMER: SYSTEMTIME sm; GetSystemTime(&sm); TCHAR timer[30]; TCHAR Hour[5]; TCHAR Min[5]; TCHAR Sec[5]; _stprintf(timer,TEXT("%s:%s:%s"),KeepTheDoubleOfTime(sm.wHour+8,Hour), KeepTheDoubleOfTime(sm.wMinute,Min),KeepTheDoubleOfTime(sm.wSecond,Sec)); SetWindowText(GetDlgItem(hwndDlg,IDC_EDIT_TIMER),timer); break; case WM_CLOSE: DestroyWindow(hwndDlg); break; case WM_DESTROY: PostQuitMessage(0); break;
} return FALSE;}
int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // pointer to command line int nCmdShow // show state of window){ DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG_TIMER), NULL,DialogProc,(LPARAM)atoi(lpCmdLine)); return 0;}

//以下内容保存为 resourch.h
/***********************************************************************************************/
//{{NO_DEPENDENCIES}}// Microsoft Developer Studio generated include file.// Used by ResFor时钟test.rc//#define IDD_DIALOG_TIMER 101#define IDC_EDIT_TIMER 1000#define IDC_DATETIMEPICKER1 1001#define IDC_STATIC_1 1002#define IDC_STATIC_2 1003
// Next default values for new objects// #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE 102#define _APS_NEXT_COMMAND_VALUE 40001#define _APS_NEXT_CONTROL_VALUE 1004#define _APS_NEXT_SYMED_VALUE 101#endif#endif

//以下内容保存为 ResFor时钟test.rc
/***********************************************************************************************/
//Microsoft Developer Studio generated resource script.//#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 2 resource.//#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////// Chinese (中国) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)#ifdef _WIN32LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED#pragma code_page(936)#endif //_WIN32
#ifdef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// TEXTINCLUDE//
1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0"END
2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0"END
3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0"END
#endif // APSTUDIO_INVOKED
///////////////////////////////////////////////////////////////////////////////// Dialog//
IDD_DIALOG_TIMER DIALOGEX 0, 0, 99, 61STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENUEXSTYLE WS_EX_CLIENTEDGECAPTION "Timer"FONT 10, "System"BEGIN CTEXT "Static",IDC_EDIT_TIMER,7,43,86,12 CTEXT "Static",IDC_STATIC_1,7,7,86,12 CTEXT "Static",IDC_STATIC_2,7,24,86,12END
///////////////////////////////////////////////////////////////////////////////// DESIGNINFO//
#ifdef APSTUDIO_INVOKEDGUIDELINES DESIGNINFO DISCARDABLE BEGIN IDD_DIALOG_TIMER, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 93 TOPMARGIN, 7 BOTTOMMARGIN, 55 ENDEND#endif // APSTUDIO_INVOKED
#endif // Chinese (中国) resources/////////////////////////////////////////////////////////////////////////////

#ifndef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 3 resource.//

最后新建一个win32工程,将上述文件导入工程编译即可追问

兄台,这好像不是我要的格式

追答

我这个是加了定时器的动态时钟。就跟钟表一样能看时间。

相似回答