unix时间戳time_t与UTC时区的关系

一般我用C写unix时间戳是这样子的

#include<stdio.h>
#include<time.h>

void printfDateTimeStr(struct tm *stm){
    char weekday[][4]={"天","一","二","三","四","五","六"};
    printf("timestr=%04d-%02d-%02d %02d:%02d:%02d 星期%s\n",stm->tm_year+1900,stm->tm_mon+1,stm->tm_mday,stm->tm_hour,stm->tm_min,stm->tm_sec,weekday[stm->tm_wday]);
}

int main(){

    time_t unix_timestamp=1429641418;
    unix_timestamp = time(NULL);

    struct tm *tmdate=localtime(&unix_timestamp);
    printf("unix_timestamp 现在的时间戳是=%d\n", unix_timestamp);
    printf("Local Time is :asctime=%s", asctime(tmdate));
    printf("格林威治GMT Time is   :gmtime=%s", asctime(gmtime(&unix_timestamp)));
    printfDateTimeStr(tmdate);

    printf("========================================\n");
    printf("input your unix_timestamp:");
    scanf("%d",&unix_timestamp);

    struct tm *stm=localtime(&unix_timestamp);
    printf("你的 unix_timestamp 时间戳是=%d\n",unix_timestamp);
    printf("你的 Local Time is :asctime=%s",asctime(stm));
    printf("你的 格林威治GMT Time is   :gmtime=%s",asctime(gmtime(&unix_timestamp)));
    printfDateTimeStr(stm);

    char c;
    scanf("%c",&c);
    return 0;
}

运行结果:

unix_timestamp 现在的时间戳是=1429787951
Local Time is :asctime=Thu Apr 23 19:19:11 2015
格林威治GMT Time is :gmtime=Thu Apr 23 11:19:11 2015
timestr=2015-04-23 11:19:11 星期四 dst[0]
========================================
input your unix_timestamp:0
你的 unix_timestamp 时间戳是=0
你的 Local Time is :asctime=Thu Jan 01 08:00:00 1970
你的 格林威治GMT Time is :gmtime=Thu Jan 01 00:00:00 1970
timestr=1970-01-01 00:00:00 星期四 dst[0]

time_t =0 的时候 其实是 1970-01-01 00:00:00 到UTC 0时区的秒数,而不是 我们北京时间UTC+8;所以gmtime比localtime 小8小时。

在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038。

早晚替换为64位。

时间: 2024-08-07 03:58:13

unix时间戳time_t与UTC时区的关系的相关文章

C# Unix时间戳转换为时间

在做一些接口的时候,比如返回数据中有一个时间的属性,它的值是使用Unix时间戳表示的,当我们处理它(保存到本地或者格式化前台展示)时需要转换成日期时间,在此就需要根据时间戳转换为日期时间 (注:Unix时间戳是当前标准时区时间与1970年1月1日所经历的总秒数) /// <summary> /// 根据时间戳转换为当前时间 /// </summary> /// <param name="timeSpan">时间戳(精确到秒)</param>

CST,CET,UTC,GMT,DST,Unix时间戳几种常见时间概述与关系(转)

转自:http://www.cnblogs.com/frontendBY/p/5215785.html 1.UTC: Universal Time Coordinated 协调世界时,又称世界标准时间 多数的两地时间表都以GMT来表示,但也有些两地时间表上看不到GMT字样,出现的反而是UTC这3个英文字母,究竟何谓UTC?事实上,UTC指的是Coordinated Universal Time- 世界协调时间(又称世界标准时间.世界统一时间),是经过平均太阳时(以格林威治时间GMT为准).地轴运

UNIX时间戳 UTC GMT time localtime

格林威治标准时间(GMT) 地区:英国 皇家格林尼治天文台 时区:UTC/GMT 0 (零时区) 北京时差:现在格林威治时间比北京时间晚8小时 格林威治位于泰晤士河南岸,与北岸城镇通隧道和公路.1423年格洛斯特公爵亨天雷围建了格林尼治公园,在河畔山丘建了镃望塔,后又建造了格林威治皇家天文台. 协调世界时(UTC) UTC协调世界时即格林威治平太阳时间,是指格林威治所在地的标准时间,也是表示地球自转速率的一种形式,UTC基于国际原子时间. 引用自 http://www.beijing-time.

UTC时间、GMT时间、本地时间、Unix时间戳

引用: https://blog.csdn.net/u012102306/article/details/51538574 https://blog.csdn.net/foxir/article/details/43916601 GMT和UTC GMT,即格林尼治标准时间,也就是世界时.GMT的正午是指当太阳横穿格林尼治子午线(本初子午线)时的时间.但由于地球自转不均匀不规则,导致GMT不精确,现在已经不再作为世界标准时间使用. UTC,即协调世界时.UTC是以原子时秒长为基础,在时刻上尽量接近

几个时间:UTC、GMT、本地时间、Unix时间戳

UTC(Coordinated Universal Time)时间:协调世界时,即世界标准时间 GMT(Greenwich Mean Time):格林威治/格林尼治时间 GMT=UTC,均使用秒数来计算. UTC+时区差=本地时间. 时区差东为正,西为负. Unix时间戳:计算机中看到的UTC时间都是从(1980年01月01日 0:00:00)开始计算秒数,所看到的UTC时间就是从1970年零点到具体时间共有多少秒,这个秒数就是Unix时间戳. 原文地址:https://www.cnblogs.

[转帖]UTC时间、GMT时间、本地时间、Unix时间戳

https://www.cnblogs.com/xwdreamer/p/8761825.html 引用: https://blog.csdn.net/u012102306/article/details/51538574 https://blog.csdn.net/foxir/article/details/43916601 GMT和UTC GMT,即格林尼治标准时间,也就是世界时.GMT的正午是指当太阳横穿格林尼治子午线(本初子午线)时的时间.但由于地球自转不均匀不规则,导致GMT不精确,现在

取得一个日期的 Unix 时间戳 mktime()

mktime()函数 语法: int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") ]]]]]] ) 根据给出的参

Unix时间戳转日期时间格式,C#、Java、Python各语言实现!

之前有个Q上好友没事问我,怎么自己写Unix时间戳转日期时间?于是我就顺手写了个C#版本给他!最近想起来,就萌发多写几个语言的版本分享,权当练习思路外加熟悉另外两种语言. 先说转换步骤 先处理年份,从1970年开始处理,根据平年闰年的总秒数,先得到年,剩余的秒数再求月份: 根据剩余秒数求得月份,因为2月的缘故,同样需要处理平年闰年': 得天数,直接除以每天的总秒数,然后取得天: 取小时.分钟.秒: Python版本: # -*- coding: UTF-8 -*- from datetime i

UNIX时间戳及日期的转换与计算

UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,也是在大多数计算机语言中表示日期和时间的一种标准格式.以32位整数表示格林威治标准时间,例如,使用证书11230499325表示当前时间的时间戳.UNIX时间戳是从1970年1月1日零点(UTC/GMT的午夜)开始起到当前时间所经过的秒数.1970年1月1日零点作为所有日期计算的基础,这个日期通常成为UNIX纪元. 因为UNIX时间戳是一个32位的数字格式,所以特别适用于计算机处理,例如计算两