在wince中如何把DWORD类型的以秒为单位时间转换成SYSTEMTIME或者tm结构类型的时间,在线等??????

时间:2022-06-06 11:02:21
在wince中如何把DWORD类型的以秒为单位时间转换成SYSTEMTIME或者tm结构类型的时间??????

特别急

20 个解决方案

#1


自己先up

#2


DWORD类型的以秒为单位时间?
先把这个时间变成FILETIME结构:
typedef struct _FILETIME { 
  DWORD dwLowDateTime; 
  DWORD dwHighDateTime; 
} FILETIME; 

再用FileTimeToSystemTime转成SYSTEMTIME结构

#3


怎样才能转换成FILETIME格式呢,原谅小弟愚昧

#4


人气很差

#5


是你不会问,你说的“DWORD类型的以秒为单位时间”是什么东西,微软文档里没有这句话。你还是用英文原文描述吧

#6


恩,同上,说的清楚一点

#7


晕,就是别人用DWORD t,time(&t)函数得到的时间t啊,是别人得到通过网络发给我,我需要在wince上显示出2005-1-1 8:05:04这样时间

#8


嗯,干吗不让他直接转换成字符串发给你。

#9


很多东西都是定好的,不能因为我的这款运行wince的手机而改动什么!!!!

#10


我在MSDN上直接看到了代码,为什么你不看呢

int main( void )
{
        struct tm *newtime;
        char am_pm[] = "AM";
        __time64_t long_time;

        _time64( &long_time );                /* Get time as long integer. */
        newtime = _localtime64( &long_time ); /* Convert to local time. */

        if( newtime->tm_hour > 12 )        /* Set up extension. */
                strcpy( am_pm, "PM" );
        if( newtime->tm_hour > 12 )        /* Convert from 24-hour */
                newtime->tm_hour -= 12;    /*   to 12-hour clock.  */
        if( newtime->tm_hour == 0 )        /*Set hour to 12 if midnight. */
                newtime->tm_hour = 12;

        printf( "%.19s %s\n", asctime( newtime ), am_pm );
}

上面用的是64位的,不知道你返回的是32的还是64的,不过替换一下就行,得到newtime
结构之后,直接赋值给SYSTEMTIME结构不就行了。

#11


楼上的大哥我问的是在wince中!!!!!!!!!!!!

#12


第一次看到这样问问题的,楼主圆满了。 难道还要别人帮你写程序么?

#13


我意思是在WinCE中你替换相应函数就行了。
在WINCE 5.0 中,有新函数可用

_localtime64_s
_gmtime64_s

详细见

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnppcgen/html/nativedevicedev.asp

如果在5.0之前应该是不支持的,函数源码参见(VS.NET 2005)

X:\Program Files\Microsoft Visual Studio 8\VC\ce\crt\src\loctim64.c





#14


就是找不到那样可以替代的函数才来这里问的啊,那些不知道的人就喜欢说风凉话,难道你就什么都知道吗? 在这里十分感谢热心回答我的问题的朋友门,谢谢大家!

谁知道怎么做还望赐教!

#15


我不相信没人知道,耐心等待!

#16


time_t osBinaryTime;  // C run-time, time, defined in <time.h> header.
time(&osBinaryTime);  //

COleDateTime time3(osBinaryTime)  // from time_t
用GetYear(),GetMonth(),GetDay(),GetHour(),GetMinute(),GetSecond()即可

#17


哦,看来只有MFC才行。

#18


如果你问“在wince中如何把time_t转换成SYSTEMTIME或者tm结构类型的时间”大家就明白了。我到现在都没有想明白的一点,就是为什么wince中5.0以前c运行时库对time相关的支持为什么这么差。
对于这个问题,其实你需要的是一个类似于标准c运行时库函数localtime()。在MFC for CE中MFC自己实现了一份这类函数,其实现在wcetime.cpp中。
如果你装了platform builder,可以找:
D:\WINCE410\OTHERS\MFC\SRC\wcetime.cpp
如果你装了eVC 4.0,可以找:
D:\Program Files\Windows CE Tools\wce410\STANDARDSDK_410\Mfc\Src\wcetime.cpp

你需要做的就是把这个文件拿过来直接用就是了。

#19


谢谢楼上的几位兄弟的精彩回复,我想问题应该能解决了

#20


谢谢 singlerace(独行者)

#1


自己先up

#2


DWORD类型的以秒为单位时间?
先把这个时间变成FILETIME结构:
typedef struct _FILETIME { 
  DWORD dwLowDateTime; 
  DWORD dwHighDateTime; 
} FILETIME; 

再用FileTimeToSystemTime转成SYSTEMTIME结构

#3


怎样才能转换成FILETIME格式呢,原谅小弟愚昧

#4


人气很差

#5


是你不会问,你说的“DWORD类型的以秒为单位时间”是什么东西,微软文档里没有这句话。你还是用英文原文描述吧

#6


恩,同上,说的清楚一点

#7


晕,就是别人用DWORD t,time(&t)函数得到的时间t啊,是别人得到通过网络发给我,我需要在wince上显示出2005-1-1 8:05:04这样时间

#8


嗯,干吗不让他直接转换成字符串发给你。

#9


很多东西都是定好的,不能因为我的这款运行wince的手机而改动什么!!!!

#10


我在MSDN上直接看到了代码,为什么你不看呢

int main( void )
{
        struct tm *newtime;
        char am_pm[] = "AM";
        __time64_t long_time;

        _time64( &long_time );                /* Get time as long integer. */
        newtime = _localtime64( &long_time ); /* Convert to local time. */

        if( newtime->tm_hour > 12 )        /* Set up extension. */
                strcpy( am_pm, "PM" );
        if( newtime->tm_hour > 12 )        /* Convert from 24-hour */
                newtime->tm_hour -= 12;    /*   to 12-hour clock.  */
        if( newtime->tm_hour == 0 )        /*Set hour to 12 if midnight. */
                newtime->tm_hour = 12;

        printf( "%.19s %s\n", asctime( newtime ), am_pm );
}

上面用的是64位的,不知道你返回的是32的还是64的,不过替换一下就行,得到newtime
结构之后,直接赋值给SYSTEMTIME结构不就行了。

#11


楼上的大哥我问的是在wince中!!!!!!!!!!!!

#12


第一次看到这样问问题的,楼主圆满了。 难道还要别人帮你写程序么?

#13


我意思是在WinCE中你替换相应函数就行了。
在WINCE 5.0 中,有新函数可用

_localtime64_s
_gmtime64_s

详细见

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnppcgen/html/nativedevicedev.asp

如果在5.0之前应该是不支持的,函数源码参见(VS.NET 2005)

X:\Program Files\Microsoft Visual Studio 8\VC\ce\crt\src\loctim64.c





#14


就是找不到那样可以替代的函数才来这里问的啊,那些不知道的人就喜欢说风凉话,难道你就什么都知道吗? 在这里十分感谢热心回答我的问题的朋友门,谢谢大家!

谁知道怎么做还望赐教!

#15


我不相信没人知道,耐心等待!

#16


time_t osBinaryTime;  // C run-time, time, defined in <time.h> header.
time(&osBinaryTime);  //

COleDateTime time3(osBinaryTime)  // from time_t
用GetYear(),GetMonth(),GetDay(),GetHour(),GetMinute(),GetSecond()即可

#17


哦,看来只有MFC才行。

#18


如果你问“在wince中如何把time_t转换成SYSTEMTIME或者tm结构类型的时间”大家就明白了。我到现在都没有想明白的一点,就是为什么wince中5.0以前c运行时库对time相关的支持为什么这么差。
对于这个问题,其实你需要的是一个类似于标准c运行时库函数localtime()。在MFC for CE中MFC自己实现了一份这类函数,其实现在wcetime.cpp中。
如果你装了platform builder,可以找:
D:\WINCE410\OTHERS\MFC\SRC\wcetime.cpp
如果你装了eVC 4.0,可以找:
D:\Program Files\Windows CE Tools\wce410\STANDARDSDK_410\Mfc\Src\wcetime.cpp

你需要做的就是把这个文件拿过来直接用就是了。

#19


谢谢楼上的几位兄弟的精彩回复,我想问题应该能解决了

#20


谢谢 singlerace(独行者)

#21