C语言 如何把64位时间戳转换成能看得懂的时间 (只有stdio。h 头文件 C语言自己实现方法。)

C语言 如何把64位时间戳转换成能看得懂的时间 (只有stdio。h 头文件 C语言自己实现方法。),第1张

#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程序客户端,给服务端发送消息。加上时间戳,就是在消息前面加上时间。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9316361.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存