JavaScript改写为C

JavaScript010

JavaScript改写为C,第1张

MFC里面有个CTime类,你可以拿来直接用

#include <time.h>

#include <assert.h>

#include <stdio.h>

class CTimeSpan

{

public:

CTimeSpan() throw()

CTimeSpan( __time64_t time ) throw()

CTimeSpan( long lDays, int nHours, int nMins, int nSecs ) throw()

__int64 GetDays() const throw()

__int64 GetTotalHours() const throw()

long GetHours() const throw()

__int64 GetTotalMinutes() const throw()

long GetMinutes() const throw()

__int64 GetTotalSeconds() const throw()

long GetSeconds() const throw()

__time64_t GetTimeSpan() const throw()

CTimeSpan operator+( CTimeSpan span ) const throw()

CTimeSpan operator-( CTimeSpan span ) const throw()

CTimeSpan& operator+=( CTimeSpan span ) throw()

CTimeSpan& operator-=( CTimeSpan span ) throw()

bool operator==( CTimeSpan span ) const throw()

bool operator!=( CTimeSpan span ) const throw()

bool operator<( CTimeSpan span ) const throw()

bool operator>( CTimeSpan span ) const throw()

bool operator<=( CTimeSpan span ) const throw()

bool operator>=( CTimeSpan span ) const throw()

private:

__time64_t m_timeSpan

}

inline CTimeSpan::CTimeSpan() throw() : 

m_timeSpan(0)

{

}

inline CTimeSpan::CTimeSpan( __time64_t time ) throw() : 

m_timeSpan( time )

{

}

inline CTimeSpan::CTimeSpan(long lDays, int nHours, int nMins, int nSecs) throw()

{

m_timeSpan = nSecs + 60* (nMins + 60* (nHours + __int64(24) * lDays))

}

inline __int64 CTimeSpan::GetDays() const throw()

{

return( m_timeSpan/(24*3600) )

}

inline __int64 CTimeSpan::GetTotalHours() const throw()

{

return( m_timeSpan/3600 )

}

inline long CTimeSpan::GetHours() const throw()

{

return( long( GetTotalHours()-(GetDays()*24) ) )

}

inline __int64 CTimeSpan::GetTotalMinutes() const throw()

{

return( m_timeSpan/60 )

}

inline long CTimeSpan::GetMinutes() const throw()

{

return( long( GetTotalMinutes()-(GetTotalHours()*60) ) )

}

inline __int64 CTimeSpan::GetTotalSeconds() const throw()

{

return( m_timeSpan )

}

inline long CTimeSpan::GetSeconds() const throw()

{

return( long( GetTotalSeconds()-(GetTotalMinutes()*60) ) )

}

inline __time64_t CTimeSpan::GetTimeSpan() const throw()

{

return( m_timeSpan )

}

inline CTimeSpan CTimeSpan::operator+( CTimeSpan span ) const throw()

{

return( CTimeSpan( m_timeSpan+span.m_timeSpan ) )

}

inline CTimeSpan CTimeSpan::operator-( CTimeSpan span ) const throw()

{

return( CTimeSpan( m_timeSpan-span.m_timeSpan ) )

}

inline CTimeSpan& CTimeSpan::operator+=( CTimeSpan span ) throw()

{

m_timeSpan += span.m_timeSpan

return( *this )

}

inline CTimeSpan& CTimeSpan::operator-=( CTimeSpan span ) throw()

{

m_timeSpan -= span.m_timeSpan

return( *this )

}

inline bool CTimeSpan::operator==( CTimeSpan span ) const throw()

{

return( m_timeSpan == span.m_timeSpan )

}

inline bool CTimeSpan::operator!=( CTimeSpan span ) const throw()

{

return( m_timeSpan != span.m_timeSpan )

}

inline bool CTimeSpan::operator<( CTimeSpan span ) const throw()

{

return( m_timeSpan < span.m_timeSpan )

}

inline bool CTimeSpan::operator>( CTimeSpan span ) const throw()

{

return( m_timeSpan > span.m_timeSpan )

}

inline bool CTimeSpan::operator<=( CTimeSpan span ) const throw()

{

return( m_timeSpan <= span.m_timeSpan )

}

inline bool CTimeSpan::operator>=( CTimeSpan span ) const throw()

{

return( m_timeSpan >= span.m_timeSpan )

}

class CTime

{

public:

static CTime __stdcall GetCurrentTime() throw()

CTime() throw()

CTime( __time64_t time ) throw()

CTime( int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec,

int nDST = -1 )

CTime( unsigned short wDosDate, unsigned short wDosTime, int nDST = -1 )

CTime& operator=( __time64_t time ) throw()

CTime& operator+=( CTimeSpan span ) throw()

CTime& operator-=( CTimeSpan span ) throw()

CTimeSpan operator-( CTime time ) const throw()

CTime operator-( CTimeSpan span ) const throw()

CTime operator+( CTimeSpan span ) const throw()

bool operator==( CTime time ) const throw()

bool operator!=( CTime time ) const throw()

bool operator<( CTime time ) const throw()

bool operator>( CTime time ) const throw()

bool operator<=( CTime time ) const throw()

bool operator>=( CTime time ) const throw()

struct tm* GetGmtTm( struct tm* ptm ) const

struct tm* GetLocalTm( struct tm* ptm ) const

__time64_t GetTime() const throw()

int GetYear() const throw()

int GetMonth() const throw()

int GetDay() const throw()

int GetHour() const throw()

int GetMinute() const throw()

int GetSecond() const throw()

int GetDayOfWeek() const throw()

private:

__time64_t m_time

}

inline CTime __stdcall CTime::GetCurrentTime() throw()

{

return( CTime( ::_time64( NULL ) ) )

}

inline CTime::CTime() throw() : 

m_time(0)

{

}

inline CTime::CTime( __time64_t time ) throw(): 

m_time( time )

{

}

inline CTime::CTime(int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec,

int nDST)

{

#pragma warning (push)

#pragma warning (disable: 4127) // conditional expression constant

assert( nYear >= 1900 )

assert( nMonth >= 1 && nMonth <= 12 )

assert( nDay >= 1 && nDay <= 31 )

assert( nHour >= 0 && nHour <= 23 )

assert( nMin >= 0 && nMin <= 59 )

assert( nSec >= 0 && nSec <= 59 )

#pragma warning (pop)

struct tm atm

atm.tm_sec = nSec

atm.tm_min = nMin

atm.tm_hour = nHour

atm.tm_mday = nDay

atm.tm_mon = nMonth - 1 // tm_mon is 0 based

atm.tm_year = nYear - 1900 // tm_year is 1900 based

atm.tm_isdst = nDST

m_time = _mktime64(&atm)

assert(m_time != -1) // indicates an illegal input time

}

inline CTime::CTime(unsigned short wDosDate, unsigned short wDosTime, int nDST)

{

struct tm atm

atm.tm_sec = (wDosTime & ~0xFFE0) << 1

atm.tm_min = (wDosTime & ~0xF800) >> 5

atm.tm_hour = wDosTime >> 11

atm.tm_mday = wDosDate & ~0xFFE0

atm.tm_mon = ((wDosDate & ~0xFE00) >> 5) - 1

atm.tm_year = (wDosDate >> 9) + 80

atm.tm_isdst = nDST

m_time = _mktime64(&atm)

assert(m_time != -1) // indicates an illegal input time

}

inline CTime& CTime::operator=( __time64_t time ) throw()

{

m_time = time

return( *this )

}

inline CTime& CTime::operator+=( CTimeSpan span ) throw()

{

m_time += span.GetTimeSpan()

return( *this )

}

inline CTime& CTime::operator-=( CTimeSpan span ) throw()

{

m_time -= span.GetTimeSpan()

return( *this )

}

inline CTimeSpan CTime::operator-( CTime time ) const throw()

{

return( CTimeSpan( m_time-time.m_time ) )

}

inline CTime CTime::operator-( CTimeSpan span ) const throw()

{

return( CTime( m_time-span.GetTimeSpan() ) )

}

inline CTime CTime::operator+( CTimeSpan span ) const throw()

{

return( CTime( m_time+span.GetTimeSpan() ) )

}

inline bool CTime::operator==( CTime time ) const throw()

{

return( m_time == time.m_time )

}

inline bool CTime::operator!=( CTime time ) const throw()

{

return( m_time != time.m_time )

}

inline bool CTime::operator<( CTime time ) const throw()

{

return( m_time < time.m_time )

}

inline bool CTime::operator>( CTime time ) const throw()

{

return( m_time > time.m_time )

}

inline bool CTime::operator<=( CTime time ) const throw()

{

return( m_time <= time.m_time )

}

inline bool CTime::operator>=( CTime time ) const throw()

{

return( m_time >= time.m_time )

}

inline struct tm* CTime::GetGmtTm(struct tm* ptm) const

{

// Ensure ptm is valid

assert( ptm != NULL )

if (ptm != NULL)

{

struct tm ptmTemp

errno_t err = _gmtime64_s(&ptmTemp, &m_time)

// Be sure the call succeeded

if(err != 0) { return NULL }

*ptm = ptmTemp

return ptm

}

return NULL

}

inline struct tm* CTime::GetLocalTm(struct tm* ptm) const

{

// Ensure ptm is valid

assert( ptm != NULL )

if (ptm != NULL)

{

struct tm ptmTemp

errno_t err = _localtime64_s(&ptmTemp, &m_time)

if (err != 0)

{

return NULL // indicates that m_time was not initialized!

}

*ptm = ptmTemp

return ptm

}

return NULL

}

inline __time64_t CTime::GetTime() const throw()

{

return( m_time )

}

inline int CTime::GetYear() const

struct tm ttm

struct tm * ptm

ptm = GetLocalTm(&ttm)

return ptm ? (ptm->tm_year) + 1900 : 0  

}

inline int CTime::GetMonth() const

struct tm ttm

struct tm * ptm

ptm = GetLocalTm(&ttm)

return ptm ? ptm->tm_mon + 1 : 0

}

inline int CTime::GetDay() const

{

struct tm ttm

struct tm * ptm

ptm = GetLocalTm(&ttm)

return ptm ? ptm->tm_mday : 0  

}

inline int CTime::GetHour() const

{

struct tm ttm

struct tm * ptm

ptm = GetLocalTm(&ttm)

return ptm ? ptm->tm_hour : -1  

}

inline int CTime::GetMinute() const

{

struct tm ttm

struct tm * ptm

ptm = GetLocalTm(&ttm)

return ptm ? ptm->tm_min : -1  

}

inline int CTime::GetSecond() const

struct tm ttm

struct tm * ptm

ptm = GetLocalTm(&ttm)

return ptm ? ptm->tm_sec : -1 

}

inline int CTime::GetDayOfWeek() const

struct tm ttm

struct tm * ptm

ptm = GetLocalTm(&ttm)

return ptm ? ptm->tm_wday + 1 : 0 

}

void date()

{

 CTime together = CTime(2013, 6, 22, 12, 30, 30)

 CTime now = CTime::GetCurrentTime()

 CTimeSpan left=now-together

 printf("%ld天",left.GetDays())

 printf("%02ld时",left.GetHours())

 printf("%02ld分",left.GetMinutes())

 printf("%02ld秒",left.GetSeconds())

}

void main()

{

date()

}

var a = ["a","b","c"]

var b = a.reverse() // b的结果为["c", "b", "a"]

这个地址可以完美的给你回答,另外你要学会百度,先百度再提问。你的问题可以描述为数组反转

http://www.feiesoft.com/00042/

C语言中的串有两种字符类型组成。 一种是char ,一种wchar_t。 前者是多字节串也就ANSI串,特点是每个字符最多用1个字表示,对于汉字是2个字节或者3个字节不等表示,最大程度节省字符空间。 后者是宽字节串,特点是,所有字符均由2个字节表示