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

📄 time.cpp

📁 linux下的一款播放器
💻 CPP
字号:
/* ***** BEGIN LICENSE BLOCK ***** * Source last modified: $Id: time.cpp,v 1.9.8.3 2004/07/09 01:45:47 hubbe Exp $ *  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved. *  * The contents of this file, and the files included with this file, * are subject to the current version of the RealNetworks Public * Source License (the "RPSL") available at * http://www.helixcommunity.org/content/rpsl unless you have licensed * the file under the current version of the RealNetworks Community * Source License (the "RCSL") available at * http://www.helixcommunity.org/content/rcsl, in which case the RCSL * will apply. You may also obtain the license terms directly from * RealNetworks.  You may not use this file except in compliance with * the RPSL or, if you have a valid RCSL with RealNetworks applicable * to this file, the RCSL.  Please see the applicable RPSL or RCSL for * the rights, obligations and limitations governing use of the * contents of the file. *  * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License Version 2 or later (the * "GPL") in which case the provisions of the GPL are applicable * instead of those above. If you wish to allow use of your version of * this file only under the terms of the GPL, and not to allow others * to use your version of this file under the terms of either the RPSL * or RCSL, indicate your decision by deleting the provisions above * and replace them with the notice and other provisions required by * the GPL. If you do not delete the provisions above, a recipient may * use your version of this file under the terms of any one of the * RPSL, the RCSL or the GPL. *  * This file is part of the Helix DNA Technology. RealNetworks is the * developer of the Original Code and owns the copyrights in the * portions it created. *  * This file, and the files included with this file, is distributed * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET * ENJOYMENT OR NON-INFRINGEMENT. *  * Technology Compatibility Kit Test Suite(s) Location: *    http://www.helixcommunity.org/content/tck *  * Contributor(s): *  * ***** END LICENSE BLOCK ***** */#include "hlxclib/time.h"#include "hlxclib/assert.h"#include "hlxclib/limits.h"#include "hlxclib/stdio.h"#ifndef _WINCEstruct tm* __helix_localtime(time_t* timep){    assert(!"__helix_localtime(): Not implemented\n");    return 0;}#endif /* _WINCE */#ifdef _WINCEstruct tm* __helix_localtime(long* pTime);char * __helix_asctime(struct tm *pTm);long __helix_mktime(struct tm* pTm);void __helix_tzset(){    // not needed for this wince time implementation    return;}char * __helix_ctime(long *pTime){    struct tm *pTm;    pTm = __helix_localtime(pTime);    if (!pTm)	return NULL;    return __helix_asctime(pTm);}char *DAY_NAMES[] = {    "Sun"    , "Mon"    , "Tue"    , "Wed"    , "Thu"    , "Fri"    , "Sat"};char *MONTH_NAMES[] = {    "Jan"    ,"Feb"    ,"Mar"    ,"Apr"    ,"May"    ,"Jun"    ,"Jul"    ,"Aug"    ,"Sep"    ,"Oct"    ,"Nov"    ,"Dec"};//--------------------------------------------------------// build date string in the form ddd mmm dd hh:mm:ss yyyychar * __helix_asctime(struct tm *pTm){    static char buf[80];    if (!pTm)	return NULL;    strcpy(buf,DAY_NAMES[pTm->tm_wday]);    buf[3] = ' ';    strcpy(&buf[4],MONTH_NAMES[pTm->tm_mon]);    buf[7] = ' ';    sprintf(&buf[8],"%02d %02d:%02d:%02d %04d\n",pTm->tm_mday,	pTm->tm_hour,	pTm->tm_min,	pTm->tm_sec,	pTm->tm_year+1970);    return buf;}int SECONDS_IN_MONTH[12] = {    31*24*60*60		// jan    ,28*24*60*60 	// feb    ,31*24*60*60	// mar    ,30*24*60*60	// apr    ,31*24*60*60	// may    ,30*24*60*60	// jun    ,31*24*60*60	// jul    ,31*24*60*60	// aug    ,30*24*60*60	// sep    ,31*24*60*60	// oct    ,30*24*60*60	// nov    ,31*24*60*60	// dec};//--------------------------------------------------------struct tm *__helix_gmtime(long *pTime){    static tm tm;        memset(&tm,0,sizeof(tm));    if ( !pTime || *pTime < 0)	return &tm;    long t = *pTime;    tm.tm_wday = (t/(24*60*60) + 4) % 7; // day of the week    tm.tm_year = 1970;    while (t > 0)    {	t -= 365L * 24L * 60L * 60L; // seconds/non leap year	if (t < 0)	{	    t += 365L * 24L * 60L * 60L;	    break;	}	if ((tm.tm_year & 3) == 0) // leap year	    t -= 24L * 60L * 60L; // leap year day	if (t < 0)	{	    t += 24L * 60L * 60L;	    t += 365L * 24L * 60L * 60L;	    break;	}	++tm.tm_year;    }    tm.tm_yday = t/(24L * 60L * 60L); //day of the year    while (t > 0 && tm.tm_mon < 11)    {	t -= SECONDS_IN_MONTH[tm.tm_mon];	if (t < 0)	{	    t += SECONDS_IN_MONTH[tm.tm_mon];	    break;	}	if ((tm.tm_year & 3) == 0 && tm.tm_mon == 1) // leap year and feb	    t -= 24*60*60;	if (t < 0)	{	    t += 24*60*60;	    t += SECONDS_IN_MONTH[tm.tm_mon];	    break;	}	++tm.tm_mon;    }    tm.tm_mday = t/(24*60*60);    t -= tm.tm_mday * 24*60*60;    ++tm.tm_mday; // day is 1..31    tm.tm_hour = t/(60*60); //0..23    t -= tm.tm_hour * 60*60;     tm.tm_min = t/60; // 0..60    t -= tm.tm_min * 60;    tm.tm_sec = t;    tm.tm_year -= 1900;    return &tm;}//--------------------------------------------------------struct tm* __helix_localtime(long* pTime){    tm *pTm = NULL;    long t;    TIME_ZONE_INFORMATION tz;    tm s,e; // start and end date of dst    long sabs,eabs; // absolute time of start/end dst    if (!pTime || *pTime < 0)	return NULL;    ::GetTimeZoneInformation(&tz);    t = *pTime - tz.Bias * 60;	// backup to gmt    pTm = __helix_gmtime(&t); // get local time    if (!pTm)	return NULL;    pTm->tm_isdst = 0;     if (tz.StandardDate.wMonth == 0)	return pTm;    memset(&s,0,sizeof(tm));    s.tm_year = pTm->tm_year;    s.tm_mon = tz.DaylightDate.wMonth-1;    s.tm_mday = 1;    s.tm_hour = tz.DaylightDate.wHour;    sabs = __helix_mktime(&s);    sabs += (7-s.tm_wday)*24*60*60; // days to 1st sunday    memset(&e,0,sizeof(tm));    e.tm_year = pTm->tm_year;    e.tm_mon = tz.StandardDate.wMonth-1;    e.tm_mday = 31;    e.tm_hour = tz.StandardDate.wHour;    eabs = __helix_mktime(&e);    eabs -= e.tm_wday*24*60*60; // days to last sunday    if (((t > sabs) && (t < eabs) && (eabs > sabs)) ||	(((t > sabs) || (t < eabs)) && (eabs < sabs)))    { // in dst	t -= tz.DaylightBias * 60; // take out daylight savings time	pTm = __helix_gmtime(&t);	pTm->tm_isdst = 1;    }    return pTm;   }//--------------------------------------------------------long __helix_convertTime(SYSTEMTIME *pS, int *pDayOfYear){    long t = 0;    int y = pS->wYear;    for (int i = 0; i < pS->wMonth-1; i++)	t += SECONDS_IN_MONTH[i];    if ((pS->wYear & 3) == 0 && pS->wMonth > 2)	t += 24*60*60;    t += (pS->wDay - 1)*24*60*60;     t += pS->wHour * 60*60;    t += pS->wMinute * 60;    t += pS->wSecond;    *pDayOfYear = t/(24L * 60L * 60L); //day of the year    while (y > 1970)    {	--y;	t += 365*24*60*60;	if ((y & 3) == 0)	    t += 24*60*60;    }    pS->wDayOfWeek = (t/(24*60*60) + 4) % 7; // day of the week    return t;}//--------------------------------------------------------long __helix_time(long *pTime){    long t;    SYSTEMTIME s;    int idoy;    ::GetSystemTime(&s);    t = __helix_convertTime(&s,&idoy);    if (pTime)	*pTime = t;    return t;}//--------------------------------------------------------long __helix_mktime(struct tm* pTm){    long t;    SYSTEMTIME s;    if (!pTm)	return 0;    s.wYear = pTm->tm_year+1900;    s.wMonth = pTm->tm_mon+1;    s.wDay = pTm->tm_mday;    s.wHour = pTm->tm_hour;    s.wMinute = pTm->tm_min;    s.wSecond = pTm->tm_sec;    t = __helix_convertTime(&s,&pTm->tm_yday);    pTm->tm_wday = s.wDayOfWeek;    return t;}#endif /* _WINCE */#ifdef _OPENWAVE#include "platform/openwave/hx_OpUtils.h"time_t __helix_time(time_t* p){    time_t t = op_time();    if (p) *p = t;    return t;}struct tm *__helix_gmtime(const time_t *timep){    static struct tm structTM;    op_gmtime(op_time(), &structTM);    return &structTM;}time_t __helix_mktime(struct tm* tm){    // XXXSAB Assume that we're always dealing with UTC time?    return op_timegm(tm);}int __helix_gettimeofday(struct timeval *tv, void *tz){	int ret = 0;	static U32 carry = 0;    static const U32 carryIncrement = (UINT_MAX / 1000) + 1;    static U32 lastT = 0;    U32 t = op_getMSecs();    if (t < lastT)	{		carry += carryIncrement;	}    lastT = t;	U32 ts = t / 1000;    tv->tv_sec = ts + carry;    tv->tv_usec = 1000 * (t - ts * 1000);	return ret;}char * __helix_ctime(const time_t *timer){	char *st = NULL; 		/*	 	struct op_tm {			S8 tm_sec;       seconds (0 - 61)         			S8 tm_min;       minutes (0 - 59)         			S8 tm_hour;      hours (0 - 23)           			S8 tm_mday;      day of month (1 - 31)    			S8 tm_mon;       month of year (0 - 11)   			S8 tm_wday;      day of week (Sunday = 0) 			S16 tm_year;     year - 1900              			S16 tm_yday;     day of year (0 - 365)    	*/	op_tm optm;	if (kTrue == op_gmtime(*timer, &optm))	{		/*		 * based on iso c, return string is precisely 26 chars		 * in the form of: Wed Jan 02 02:03:55 1980\n\0		 */		st = new char[26];		char *weekdays[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};		char *months[] = {"Jan", "Feb", "Mar", "Api", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};		snprintf(st, 26, "%s %s %2u:%2u:%2u:%2u %4u\n\0", weekdays[optm.tm_wday], 					months[optm.tm_mon],optm.tm_mday, optm.tm_hour, optm.tm_min, optm.tm_sec, optm.tm_year);	}	return st;}#endif /* _OPENWAVE */

⌨️ 快捷键说明

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