⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        src/msw/wince/time.cpp// Purpose:     Implements missing time functionality for WinCE// Author:      Marco Cavallini (MCK) - wx@koansoftware.com// Modified by: Vadim Zeitlin for VC8 support// Created:     31-08-2003// RCS-ID:      $Id: time.cpp,v 1.21 2006/11/04 23:27:13 VZ Exp $// Copyright:   (c) Marco Cavallini// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// ===========================================================================// declarations// ===========================================================================// ---------------------------------------------------------------------------// headers// ---------------------------------------------------------------------------// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#ifndef WX_PRECOMP    #include "wx/msw/wrapwin.h"#endif#include "wx/msw/wince/time.h"#if defined(__VISUALC__) && (__VISUALC__ >= 1400)// VC8 does provide the time functions but not the standard ones#include <altcecrt.h>time_t __cdecl time(time_t *t){    __time64_t t64;    if ( !_time64(&t64) )        return (time_t)-1;    if ( t )        *t = (time_t)t64;    return (time_t)t64;}time_t __cdecl mktime(struct tm *t){    return (time_t)_mktime64(t);}#else // !VC8///////////////////////////////////////////////////////////////////////////////////////////////                                                                                         ////                             strftime() - taken from OpenBSD                             ////                                                                                         ///////////////////////////////////////////////////////////////////////////////////////////////#define IN_NONE	0#define IN_SOME	1#define IN_THIS	2#define IN_ALL	3#define CHAR_BIT      8#define TYPE_BIT(type)	(sizeof (type) * CHAR_BIT)#define TYPE_SIGNED(type) (((type) -1) < 0)#define INT_STRLEN_MAXIMUM(type) \    ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))#define MONSPERYEAR	12#define DAYSPERWEEK	7#define TM_YEAR_BASE	1900#define HOURSPERDAY	24#define DAYSPERNYEAR	365#define DAYSPERLYEAR	366static char		wildabbr[] = "WILDABBR";char *			tzname[2] = {	wildabbr,	wildabbr};#define Locale	(&C_time_locale)struct lc_time_T {	const char *	mon[MONSPERYEAR];	const char *	month[MONSPERYEAR];	const char *	wday[DAYSPERWEEK];	const char *	weekday[DAYSPERWEEK];	const char *	X_fmt;	const char *	x_fmt;	const char *	c_fmt;	const char *	am;	const char *	pm;	const char *	date_fmt;};static const struct lc_time_T	C_time_locale = {	{		"Jan", "Feb", "Mar", "Apr", "May", "Jun",		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"	}, {		"January", "February", "March", "April", "May", "June",		"July", "August", "September", "October", "November", "December"	}, {		"Sun", "Mon", "Tue", "Wed",		"Thu", "Fri", "Sat"	}, {		"Sunday", "Monday", "Tuesday", "Wednesday",		"Thursday", "Friday", "Saturday"	},	/* X_fmt */	"%H:%M:%S",	/*	** x_fmt	** C99 requires this format.	** Using just numbers (as here) makes Quakers happier;	** it's also compatible with SVR4.	*/	"%m/%d/%y",	/*	** c_fmt	** C99 requires this format.	** Previously this code used "%D %X", but we now conform to C99.	** Note that	**      "%a %b %d %H:%M:%S %Y"	** is used by Solaris 2.3.	*/	"%a %b %e %T %Y",	/* am */	"AM",	/* pm */	"PM",	/* date_fmt */	"%a %b %e %H:%M:%S %Z %Y"};static char *_add(const char * str, char * pt, const char * const ptlim){	while (pt < ptlim && (*pt = *str++) != '\0')		++pt;	return pt;}static char *_conv(const int n, const char * const format, char * const pt, const char * const ptlim){	char	buf[INT_STRLEN_MAXIMUM(int) + 1];	(void) _snprintf(buf, sizeof buf, format, n);	return _add(buf, pt, ptlim);}static char *_fmt(const char * format, const struct tm * const t, char * pt, const char * const ptlim, int * warnp){	for ( ; *format; ++format) {		if (*format == '%') {label:			switch (*++format) {			case '\0':				--format;				break;			case 'A':				pt = _add((t->tm_wday < 0 ||					t->tm_wday >= DAYSPERWEEK) ?					"?" : Locale->weekday[t->tm_wday],					pt, ptlim);				continue;			case 'a':				pt = _add((t->tm_wday < 0 ||					t->tm_wday >= DAYSPERWEEK) ?					"?" : Locale->wday[t->tm_wday],					pt, ptlim);				continue;			case 'B':				pt = _add((t->tm_mon < 0 ||					t->tm_mon >= MONSPERYEAR) ?					"?" : Locale->month[t->tm_mon],					pt, ptlim);				continue;			case 'b':			case 'h':				pt = _add((t->tm_mon < 0 ||					t->tm_mon >= MONSPERYEAR) ?					"?" : Locale->mon[t->tm_mon],					pt, ptlim);				continue;			case 'C':				/*				** %C used to do a...				**	_fmt("%a %b %e %X %Y", t);				** ...whereas now POSIX 1003.2 calls for				** something completely different.				** (ado, 1993-05-24)				*/				pt = _conv((t->tm_year + TM_YEAR_BASE) / 100,					"%02d", pt, ptlim);				continue;			case 'c':				{				int warn2 = IN_SOME;				pt = _fmt(Locale->c_fmt, t, pt, ptlim, warnp);				if (warn2 == IN_ALL)					warn2 = IN_THIS;				if (warn2 > *warnp)					*warnp = warn2;				}				continue;			case 'D':				pt = _fmt("%m/%d/%y", t, pt, ptlim, warnp);				continue;			case 'd':				pt = _conv(t->tm_mday, "%02d", pt, ptlim);				continue;			case 'E':			case 'O':				/*				** C99 locale modifiers.				** The sequences				**	%Ec %EC %Ex %EX %Ey %EY				**	%Od %oe %OH %OI %Om %OM				**	%OS %Ou %OU %OV %Ow %OW %Oy				** are supposed to provide alternate				** representations.				*/				goto label;			case 'e':				pt = _conv(t->tm_mday, "%2d", pt, ptlim);				continue;			case 'F':				pt = _fmt("%Y-%m-%d", t, pt, ptlim, warnp);				continue;			case 'H':				pt = _conv(t->tm_hour, "%02d", pt, ptlim);				continue;			case 'I':				pt = _conv((t->tm_hour % 12) ?					(t->tm_hour % 12) : 12,					"%02d", pt, ptlim);				continue;			case 'j':				pt = _conv(t->tm_yday + 1, "%03d", pt, ptlim);				continue;			case 'k':				/*				** This used to be...				**	_conv(t->tm_hour % 12 ?				**		t->tm_hour % 12 : 12, 2, ' ');				** ...and has been changed to the below to				** match SunOS 4.1.1 and Arnold Robbins'				** strftime version 3.0.  That is, "%k" and				** "%l" have been swapped.				** (ado, 1993-05-24)				*/				pt = _conv(t->tm_hour, "%2d", pt, ptlim);				continue;#ifdef KITCHEN_SINK			case 'K':				/*				** After all this time, still unclaimed!				*/				pt = _add("kitchen sink", pt, ptlim);				continue;#endif /* defined KITCHEN_SINK */			case 'l':				/*				** This used to be...				**	_conv(t->tm_hour, 2, ' ');				** ...and has been changed to the below to				** match SunOS 4.1.1 and Arnold Robbin's				** strftime version 3.0.  That is, "%k" and				** "%l" have been swapped.				** (ado, 1993-05-24)				*/				pt = _conv((t->tm_hour % 12) ?					(t->tm_hour % 12) : 12,					"%2d", pt, ptlim);				continue;			case 'M':				pt = _conv(t->tm_min, "%02d", pt, ptlim);				continue;			case 'm':				pt = _conv(t->tm_mon + 1, "%02d", pt, ptlim);				continue;			case 'n':				pt = _add("\n", pt, ptlim);				continue;			case 'p':				pt = _add((t->tm_hour >= (HOURSPERDAY / 2)) ?					Locale->pm :					Locale->am,					pt, ptlim);				continue;			case 'R':				pt = _fmt("%H:%M", t, pt, ptlim, warnp);				continue;			case 'r':				pt = _fmt("%I:%M:%S %p", t, pt, ptlim, warnp);				continue;			case 'S':				pt = _conv(t->tm_sec, "%02d", pt, ptlim);				continue;			case 's':				{					struct tm	tm;					char		buf[INT_STRLEN_MAXIMUM(								time_t) + 1];					time_t		mkt;					tm = *t;					mkt = mktime(&tm);					if (TYPE_SIGNED(time_t))						(void) _snprintf(buf, sizeof buf,						    "%ld", (long) mkt);					else	(void) _snprintf(buf, sizeof buf,						    "%lu", (unsigned long) mkt);					pt = _add(buf, pt, ptlim);				}				continue;			case 'T':				pt = _fmt("%H:%M:%S", t, pt, ptlim, warnp);				continue;			case 't':				pt = _add("\t", pt, ptlim);				continue;			case 'U':				pt = _conv((t->tm_yday + DAYSPERWEEK -					t->tm_wday) / DAYSPERWEEK,					"%02d", pt, ptlim);				continue;			case 'u':				/*				** From Arnold Robbins' strftime version 3.0:				** "ISO 8601: Weekday as a decimal number				** [1 (Monday) - 7]"				** (ado, 1993-05-24)				*/				pt = _conv((t->tm_wday == 0) ?					DAYSPERWEEK : t->tm_wday,					"%d", pt, ptlim);				continue;			case 'V':	/* ISO 8601 week number */			case 'G':	/* ISO 8601 year (four digits) */			case 'g':	/* ISO 8601 year (two digits) */				{					int	year;					int	yday;					int	wday;					int	w;					year = t->tm_year + TM_YEAR_BASE;					yday = t->tm_yday;					wday = t->tm_wday;					for ( ; ; ) {						int	len;						int	bot;						int	top;						len = isleap(year) ?							DAYSPERLYEAR :							DAYSPERNYEAR;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -