#include <stdioh>
typedef long long int time64;
/
将64位时间戳转化为时间数组
/
void transformToDate(time64 timeStamp ,time64 dateArry)
{
time64 low ,high ,mid ,t;
time64 year ,month ,day ,hour ,minute ,second ,milliSecond;
time64 daySum[] = {0 ,31 ,59 ,90 ,120 ,151 ,181 ,212 ,243 ,273 ,304 ,334 ,365};
time64 milOfDay = 24 3600 1000;
time64 milOfHour = 3600 1000;
/防止超过9999-12-31 23:59:59:999/
if(timeStamp > 315537897599999) {
timeStamp = 315537897599999;
}
low = 1;
high = 9999;
while(low <= high)
{
mid = (low+high)>>1;
t = ((mid-1) 365 + (mid-1)/4 - (mid-1)/100 + (mid-1)/400) milOfDay;
if(t == timeStamp)
{
low = mid + 1;
break;
}
else if(t < timeStamp)
low = mid + 1;
else
high = mid - 1;
}
year = low-1;
timeStamp -= ((year-1) 365 + (year-1)/4 - (year-1)/100 + (year-1)/400) milOfDay;
int isLeapYear = ((year&3) == 0 && year%100!=0) || year%400 == 0;
for(month = 1 ;(daySum[month] + ((isLeapYear && month > 1) 1 : 0)) milOfDay <= timeStamp && month < 13 ;month ++) {
if(isLeapYear && month > 1)
++daySum[month];
}
timeStamp -= daySum[month-1] milOfDay;
day = timeStamp / milOfDay;
timeStamp -= day milOfDay;
hour = timeStamp / milOfHour;
timeStamp -= hour milOfHour;
minute = timeStamp / 60000;
timeStamp -= minute 60000;
second = timeStamp / 1000;
milliSecond = timeStamp % 1000;
dateArry[0] = year;
dateArry[1] = month;
dateArry[2] = day;
dateArry[3] = hour;
dateArry[4] = minute;
dateArry[5] = second;
dateArry[6] = milliSecond;
}
//将64位时间戳转化为时间字符串
void transformToDateString(time64 timeStamp ,char dateString)
{
time64 year ,month ,day ,hour ,minute ,second ,milliSecond;
time64 intp[] = {&year ,&month ,&day ,&hour ,&minute ,&second ,&milliSecond };
transformToDate(timeStamp ,intp);
sprintf(dateString ,"%4I64d-%2I64d-%2I64d %2I64d:%2I64d:%2I64d:%3I64d" ,
year ,month ,day+1 ,hour ,minute ,second ,milliSecond );
}
int main()
{
time64 time;
char date[256];
scanf("%lld",&time);
transformToDateString(time,date);
printf("date= %s\n",date);
return 0;
}
示例运行结果:
63510000999140
date= 2013-07-21 10:56:39:140
以字符串的方式显示 当前时间
#include <stdioh>
#include <timeh>
int main ()
{
time_t timep;
time (&timep);
printf("%s",ctime(&timep));
}
其中 time_t 实际 为 长整型 long
time_t t;
struct tm ti;
char buffer[1048], input[1024];
time(&t); //获取时间戳
ti = localtime(&t); //转成详细时间信息
//格式化时间字符串
sprintf(buffer, "%04d/%02d/%02d %02d:%02d:%02d ",
ti->tm_year + 1900,
ti->tm_mon + 1,
ti->tm_mday,
ti->tm_hour,
ti->tm_min,
ti->tm_sec);
fgets(input, 1024, stdin);
strcat(buffer, input); //连接两个字符串
printf("%s", buffer);
send(sockfd,buffer,strlen(buffer),0);
//望采纳
工作中在做某个业务需求的时候,某同事的实现,遇到了一个 NSCalendar 进行日期转换卡顿的问题。
最后分析发现是调用了 NSCalendar 的转换方法导致的,使用此方法是为了计算某个时间戳是否在某个区间内。
比如判断时间戳是美股盘前(夏令时:16:00~21:30)
每个执行3次求平均值
目的是计算时间戳是否在某一天的某个区间,所以可以采用对时间戳取余数的方法进行对比。
我们知道一天的时间是 24 60 60 ,则对应的时间戳对其取余则是在这一天的某一时刻。
当天的时间 00:00:00~23:59:59 对应的时间戳为 0~86399 ,则余数也应该在这个范围。
所以我们可以利用这个区间去判断指定时间戳是否在这个区间。如下图所示:
可看出来,对于执行次数优化非常明显,基本都是99%以上。
根据优化效果,以后如果有关于日历方面的计算,建议思考一下是否需要考虑性能问题。
java中可以这样定义一个公共方法获取系统时间戳:
public static String getFormatDateTime(javautilDate currDate, String format) {
if (currDate == null) {
return "";
}
SimpleDateFormat dtFormatdB = null;
try {
dtFormatdB = new SimpleDateFormat(format);
return dtFormatdBformat(currDate);
} catch (Exception e) {
dtFormatdB = new SimpleDateFormat(TIME_FORMAT);
try {
return dtFormatdBformat(currDate);
} catch (Exception ex) {
}
}
return "";
}
增加一个月后的公共方法:
Calendar cal = CalendargetInstance();
caladd(CalendarMONTH, +1);
一js将时间转换成时间戳
1js获取当前时间戳的方法
1
2
3
var timestamp1 = Dateparse(new Date());
var timestamp2 = (new Date())valueOf();
var timestamp3 = new Date()getTime();
第一种:获取的时间戳是把毫秒改成000显示,第二种和第三种是获取了当前毫秒的时间戳。
2js获取制定时间戳的方法
1
2
var oldTime = (new Date("2015/06/23 08:00:20"))getTime()/1000;
getTime()返回数值的单位是毫秒。
二js把时间戳转为为普通日期格式
1Date toLocaleString方法
1
2
3
function getLocalTime(nS) {
return new Date(parseInt(nS) 1000)toLocaleString()replace(/:\d{1,2}$/,' ');
}
parseInt() 函数可解析一个字符串,并返回一个整数。
js中时间 *** 作单位是毫秒。
toLocaleString() 方法可根据本地时间把 Date 对象转换为字符串,并返回结果。
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
replace(/:\d{1,2}$/,' ')验证替换以:开始有一位或二位数字的结束字符串,就是秒;替换为空
显示如下:
所以我们可以利用正则表达式改变我们想要的日期格式。
2Date 属性方法
1
2
3
4
5
6
7
8
9
10
11
12
13
function add0(m){return m<10'0'+m:m }
function format(shijianchuo)
{
//shijianchuo是整数,否则要parseInt转换
var time = new Date(shijianchuo);
var y = timegetFullYear();
var m = timegetMonth()+1;
var d = timegetDate();
var h = timegetHours();
var mm = timegetMinutes();
var s = timegetSeconds();
return y+'-'+add0(m)+'-'+add0(d)+' '+add0(h)+':'+add0(mm)+':'+add0(s);
}
三封装的时间格式器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/
和PHP一样的时间戳格式化函数
@param {string} format 格式
@param {int} timestamp 要格式化的时间 默认为当前时间
@return {string} 格式化的时间字符串
/
function date(format, timestamp){
var a, jsdate=((timestamp) new Date(timestamp1000) : new Date());
var pad = function(n, c){
if((n = n + "")length < c){
return new Array(++c - nlength)join("0") + n;
} else {
return n;
以上就是关于C语言 如何把64位时间戳转换成能看得懂的时间 (只有stdio。h 头文件 C语言自己实现方法。)全部的内容,包括:C语言 如何把64位时间戳转换成能看得懂的时间 (只有stdio。h 头文件 C语言自己实现方法。)、谁使用过C/C++生成一个时间戳,作为数据字签名使用的、c语言写的socket程序客户端,给服务端发送消息。加上时间戳,就是在消息前面加上时间。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)