将将long类型数据转换成时间格式如何实现

nmjd_1989 2011-10-26 11:37:23
我用long 定义个一个变量i,
用函数将long类型转换成时间格式如 2011/10/25 12:12:12
精确到秒,如何实现,请高手之间,用什么函数
...全文
1063 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
kanlianhui 2014-06-16
  • 打赏
  • 举报
回复

function do1(){
	
	
	var t=$("#longval").val();
	var d= new Date();
	d.setTime(t);
	var s = d.getFullYear() + "-" + d.getMonth() + "-" + d.getDay()  + " " + d.getHours() + ":" +  d.getMinutes()+":" + d.getSeconds() ;
	$("#dateval").val(s);

}
nmjd_1989 2011-10-27
  • 打赏
  • 举报
回复
请问下:
unsigned long Gettime(long nMicroSeconds)
{
unsigned long hour=0,min = 0,Seconds = 0,Millisecond = 0;
Millisecond= nMicroSeconds/1000;
Seconds = nMicroSeconds/1000000;
min = (Seconds/60)%60;
hour = Seconds/3600;
// printf("%d:%d:%d:%d",hour,min,Seconds,Millisecond);//这一行去掉
//return 0;
}
我希望是返回它的时分秒,不在函数中输出,该如何写,return h:m:s;
hhsyxxwl0601 2011-10-27
  • 打赏
  • 举报
回复

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

void main()
{
tm * pTm;
//_getsystime(pTm);
long tmp = 1;
pTm = localtime(&tmp);//这里的long是UTC时间,也就是从1970年1月1日8时0分0秒开始偏移的秒数.tmp=1就表示1970/1/1 08:00:01

cout<<pTm->tm_year+1900<<"/";//+1900可以参考下面贴出的tm的声明
cout<<pTm->tm_mon+1<<"/";//+1也是参考tm的声明
cout<<pTm->tm_mday<<" ";
cout<<pTm->tm_hour<<":";
cout<<pTm->tm_min<<":";
cout<<pTm->tm_sec<<endl;
}

下面是time.h中tm和localtime的声明:
struct tm {
int tm_sec; /* seconds after the minute - [0,59] */
int tm_min; /* minutes after the hour - [0,59] */
int tm_hour; /* hours since midnight - [0,23] */
int tm_mday; /* day of the month - [1,31] */
int tm_mon; /* months since January - [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylight savings time flag */
};

_CRTIMP struct tm * __cdecl localtime(const time_t *);
hhsyxxwl0601 2011-10-27
  • 打赏
  • 举报
回复
lz,我还是没弄明白,你传入的这个秒是怎么来的?
如果传入的是从1970-1-1 08;00:00(北京时间)开始偏移的秒数的话,用localtime就行,只不过把cout输出,改为函数返回就行,可以参考Gettime()中的做法;
如果你只是做练习,把一个随机传入的秒数需要转化为时分秒,那么用Gettime()就可以了。
关于你那段代码,11L的兄弟是对的,执行time (&seconde),seconde获取到了当前系统时间(从1970-1-1 08:00:00到当前时间偏移的秒数);
nmjd_1989 2011-10-27
  • 打赏
  • 举报
回复
谢谢,再问一下啊,vs2010中无法将time_t 转换为long类型
li735937915 2011-10-27
  • 打赏
  • 举报
回复
单一的转换格式,貌似没有这个直接转换的函数。可以笨一点的方法:先将long型转换为string型,然后用substr()截取,再重新组合吧
nmjd_1989 2011-10-27
  • 打赏
  • 举报
回复
是这样,如果不用localtime这个格式转换啊,有问题啊
nice_cxf 2011-10-27
  • 打赏
  • 举报
回复
time (&seconde);
把这行删掉就行,不过你这个1589大概只能返回1970年1月1日0:30左右的时间
nmjd_1989 2011-10-27
  • 打赏
  • 举报
回复
char timE[80];

struct tm *timeinfo;

long seconde=1569;

time (&seconde);

timeinfo = localtime (&seconde);

strftime (timE,80,"Data:\n%Y-%m-%d Time:\n%I:%M:%S\n",timeinfo);
printf("%s",timE);

我给他传值,他总是显示当前的时间啊,我只是需要将我传入的值转换成时间格式,而不是获得当前时间
hhsyxxwl0601 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nmjd_1989 的回复:]
太感谢了,在问个问题,在时间转换函数,那个time()总获得是当前的时间,我接受的数据不是当前时间,我只是转换,那用localtime()这个函数有问题啊,
[/Quote]
你用localtime()有什么问题?可不可以把代码贴出来看下?
nmjd_1989 2011-10-27
  • 打赏
  • 举报
回复
太感谢了,在问个问题,在时间转换函数,那个time()总获得是当前的时间,我接受的数据不是当前时间,我只是转换,那用localtime()这个函数有问题啊,
hhsyxxwl0601 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 nmjd_1989 的回复:]
请问下:
unsigned long Gettime(long nMicroSeconds)
{
unsigned long hour=0,min = 0,Seconds = 0,Millisecond = 0;
Millisecond= nMicroSeconds/1000;
Seconds = nMicroSeconds/1000000;
min = (Second……
[/Quote]
32位机的话,你传一个long型的MicroSecond,它可以存的范围太小了,hour为2就不够存了,如果不是必须要传入MicroSecond的话,修改传入参数为second,代码如下:
char * Gettime(unsigned long nSeconds)
{
unsigned long hour=0,min = 0,MicroSecond = 0,Millisecond = 0;

Millisecond= nSeconds*1000;
MicroSecond = nSeconds*1000000;

hour = nSeconds/3600;
if( 24<=hour )
{
hour %=24;
}

min = nSeconds%3600/60;
nSeconds = nSeconds%3600%60;
// printf("%d:%d:%d:%d",hour,min,Seconds,Millisecond);//这一行去掉
char *pTime = new char[9];
memset(pTime,0,9);
sprintf(pTime,"%d:%d:%d",hour,min,nSeconds);
return pTime;
}

当然如果是64位机的话,long就足够了,传入参数不需要修改,代码如下:
char * Gettime(unsigned long nMicroSeconds)
{
unsigned long hour=0,min = 0,Seconds = 0,Millisecond = 0;
Millisecond= nMicroSeconds/1000;
Seconds = nMicroSeconds/1000000;
hour = Seconds/3600;
min = Seconds%3600/60;
Seconds = Seconds%3600%60;
// printf("%d:%d:%d:%d",hour,min,Seconds,Millisecond);//这一行去掉
char *pTime = new char[9];
memset(pTime,0,9);
sprintf(pTime,"%d:%d:%d",hour,min,Seconds);
return pTime;
}
nmjd_1989 2011-10-26
  • 打赏
  • 举报
回复
哦,再请问一个问题,我想再函数中返回它的时分秒,如:return h:m:s,该如何写呢
streamlv 2011-10-26
  • 打赏
  • 举报
回复
你的long型是怎么保存时间的?
比如这个对应的long是什么?
2011/10/25 12:12:12
nmjd_1989 2011-10-26
  • 打赏
  • 举报
回复
请问下,想2011/10/25 12:12:12输出的是什么类型是字符串吗,
贪食蛇男 2011-10-26
  • 打赏
  • 举报
回复
看一下 time.h 中,有函数如 localtime() 直接把 time_t 转成一个结构的指针。
time_t 其实就是一个 long


Convert a time value and correct for the local time zone. More secure versions of these functions are available; see localtime_s, _localtime32_s, _localtime64_s.


struct tm *localtime(
const time_t *timer
);
struct tm *_localtime32(
const __time32_t *timer
);
struct tm *_localtime64(
const __time64_t *timer
);

-- from msdn

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧