用C语言获取本地的时区

用C语言获取本地的时区,第1张

getlocaltime里面是没有时区信息的。

你可以这样:

time_t time_utc = 0;

struct tm p_tm_time;

int time_zone = 0;

p_tm_time = localtime( &time_utc );   //转成当地时间

time_zone = ( p_tm_time->tm_hour > 12 )    ( p_tm_time->tm_hour-=  24 )  :  p_tm_time->tm_hour;

把0时间转为当地时间,得到的是带时区的结果。

GMT:格林威治时间 是指位于伦敦郊区的皇家格林威治天文台的标准时间(开发中不常用)

UTC:协调世界时,世界统一时间,世界标准时间,国际协调时间。

中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8(相差八个小时)

这套时间系统被应用于许多互联网和万维网的标准中,因此在日常开发中UTC时间的使用较为常见

iOS中的NSDate对象存放的日期始终是UTC的标准时间(比如下面的例子,服务器返回的字符串是utc时间,本地时区是北京)

有结果可知:时间字符串转成NSDate时,没有指定时间字符串的时区,系统会根据本地时区,将时间字符串转成utc时间存放在NSDate对象中(通过Summary可以看出),而NSLog打印NSDate时,又会根据当地时区将utc时间转成本地时区时间打印出来。

结论:NSDate中存放的时间会自动转换成utc时间,NSLog打印的时间会自动根据时区打印不同的结果

import javatextSimpleDateFormat;

import javautilCalendar;

public class DateDemo {

    public static void main(String[] args) {

        Systemoutprintln(getDateString());

    }

    public static String getDateString() {

        Calendar calendar = CalendargetInstance();

        calendaradd(CalendarSECOND, 10);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

        return sdfformat(calendargetTime());

    }

}

中间是个T吗,其实我觉得空格会更好看。

\1 时间的表达方式有两种,一种是 human time,比如我们所说的年月日等,一种是 machine time,比如我们用 SystemcurrentTimeMillis() 方法获得的毫秒数。

\2 machine time 表示的是从epoch时间(1970年1月1日0时0分0秒)开始到现在已经过了多少时间,注意这里的时间都是指UTC时间。

\3 对于任意给定的 machine time,都可以通过加上epoch时间,算出该 machine time 对应的UTC时间,即 machine time 和 UTC 时间是一一对应的。

\4 当 machine time 为0时,其对应的UTC时间就是epoch时间。

\5 machine time 可以理解为是UTC时间的另一种表现形式,其本质上就是UTC时间。

\6 human time 是一种用人类便于理解方式表示 machine time 的方法,当我们看到一个用年月日等表示的 human time 时,它其实是对 machine time 做的一种转换。

\7 由于机器只能获取 machine time,所以所有的human time其实都是要先获取 machine time,再在其基础上做各种计算得来的。

\8 UTC 时间是 human time 时间的一种,所以要想获取当前时刻的 UTC 时间,也要先获取 machine time,再按照上述规则计算出来。

\9 UTC 时间不受时区影响,对于给定的一个UTC时间,在全球任意地方都表示同一时刻。

\10 UTC 时间也可以粗略的理解为时区为0的时间。

\11 由于machine time 和 UTC 时间的关系,machine time 也是不受时区影响的,即用 SystemcurrentTimeMillis() 方法获取的一个 machine time,在全球的任意地方也都表示同一时刻。

\12 human time还有一种形式就是本地时间,或者说是本地时区时间。

\13 本地时间和UTC时间的关系是,本地时间是在UTC时间的基础上,通过加减一定的时间得来的,加减的具体数值受所在时区影响。

\14 比如,中国所处时区为东8区,想要算中国境内的本地时间的流程是,先获取 machine time,根据 machine time 算出 UTC 时间,然后再在UTC时间基础上加8个小时,算出中国境内的本地时间。

\15 由于UTC时间并不适合表示全球所有地区的本地时间(比如,UTC时间的14点在某些地区可能是晚上),所以才有了本地时区时间这个概念。不同时区在同一时刻使用不同的本地时间,本质上是为了方便人们的日常生活。

\16 如果只有一个本地时间,而没有该时间对应的时区的话,是无法表示时间线上的某一时刻的,所以,在全球不同地区进行时间交换时,要么用UTC时间,要么用带有时区的本地时间。

\17 不管是UTC时间还是本地时区时间,它们都是 human time,即都可以通过一定规则与machine time 相互转换,区别就是不同的 human time 形式使用不同的转换规则。

\18 暂时想到这么多,如果后续还有其他总结,我们再做补充。

以上就是 良许教程网 为各位朋友分享的有关机器时间、UTC时间、本地时间的总结。

最后,最近很多小伙伴找我要 Linux学习路线图 ,于是我根据自己的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。无论你是面试还是自我提升,相信都会对你有帮助!目录如下:

免费送给大家,只求大家金指给我点个赞!

电子书 | Linux开发学习路线图

也希望有小伙伴能加入我,把这份电子书做得更完美!

推荐阅读:

;           UTC时间与北京时间的换算

      我们知道,世界的每个地区都有自己的本地时间,整个地球共分为二十四时区,也就是说,每个时区都有自己的本地时间。

      在互联网通信中,统一使用一个标准时间,称为通用协调时(UTC, Universal Time Coordinated)。UTC与格林尼治时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同。

      如何进行UTC时间与北京时间的换算呢北京市区是东八区,领先UTC 8个小时,例如:Sun, 19 July 2020 09:45:10 +0800,说明时间是2020年7月19号,星期日,上午9点45分10秒,该地区本地时领先UTC差 8个小时(+0800,就是东八区时间)。如果要把这个时间转化为UTC,可以使用以下公式:

      UTC + 时区差 = 本地时间

      时区差东为正,西为负。为此,把东八区时区差记为:+0800,

      UTC + (+0800) = 北京时间

      那么,

      UTC = 北京时间 - 0800,即:0945 - 0800 = 0145

      即UTC是当天凌晨1点45分10秒。若结果是负数就意味着是UTC前一天,把这个负数加上2400就是UTC在前一天的时间。例如,北京时间是 0225 (凌晨2点25分),那么,UTC就是 0225 – 0800 = -0375,负号意味着是前一天, -0375 + 2400 = 2025,既前一天的晚上8点25分。

以上就是关于用C语言获取本地的时区全部的内容,包括:用C语言获取本地的时区、NSDate GMT以及UTC、Java 获取当前UTC时间+10秒并转换格式,求大神等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9758383.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存