2010-12-09 16:17:00 west_609 阅读数 4822
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20510 人正在学习 去看看 马永亮
  1. 首先,先介绍简单介绍一下世界时区:全世界有24个时区,其中以格林威治时间为世界标准的时区(GMT+0),其它时区的时间都是在这个标准时间的基础上加减从而得到本时区的标准时间。例如我们中国的时间就是在GMT时间加上8个小时。
  2. Linux中与时区有关的变量

  TZ这个变量指定了当前的系统时区。这个时区值勤会影响下面的一引起时间转换。例如假设当前的系统时间是10:00AM,如果我们把当前的时区设置成东八区,则标准时间就是(即GMT+0)的时间就是10-8=2:00AM,如果是看成是东6区的话,则标准时间就变成了10-6=4:00AM了。

 

时区设置的函数是:setenv("TZ", "GMT-8", 1);

表示的意思就是:将当前时区设置成东八区。需要注意的是,这里要写成GMT-8才是东八区,不是GMT+8,原因GMT表示时间的方式有点不同,它的格式是(GMT[+/-]offset),如果目标时区是在东区,则是负的,否则是正的。意思就是本地时区加减多少(offset)才能得到标准时间。

 

     3.  C/C++时间转换的相关函数

time_t mktime(struct tm *timeptr

);


struct tm *localtime(const time_t *timer
);


struct tm *gmtime(const time_t *timer
);

        mktime 是将一个tm*结构转换成自1970/1/1 00:00:00(GMT+0)到当前与tm相对应的GMT当前时间的秒数。此函数受到环境变量TZ的影响。

        例如:当前的tm是:1970/1/1-16:00:00,TZ是东八区(由此可知GMT+0的时间是8:00AM)

   struct tm local;
   area = &local;
   area->tm_year = 70;
   area->tm_mon = 0;
   area->tm_mday = 1;
   area->tm_hour = 16;
   area->tm_min = 0;
   area->tm_sec = 0;
   area->tm_isdst = 0;

 

          那么我们最后调用mktime的结果是:(16-8)*3600 = 28800;

 

localtime这个函数由它的名字可知它是将一个表示GMT+0的标准时间转换成本地时区的时间。

例如timer 的值是上面的28800, 并且当前的TZ设置成东六区,那么我们的本地时间就是(28800/3600+6)=14点。意思:28800表示当前GMT+0是8:00AM, 那么GMT+6(东六)本地所在的时间就是下午2点。

 

最后是gmttime,它不受到TZ变量的影响,参数timer表示自1970/1/1-0:0:0(GMT+0)到某一个GMT+0时间点的秒数。gmtime的运算结果就是这个GMT+0时区的这个时间点。

例如timer = 28800,那么当地的时间就是1970/1/1-08:00:00 AM.

 

 








2019-01-03 10:02:39 sxhexin 阅读数 3255
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20510 人正在学习 去看看 马永亮

Linux系统和Windows系统时间总是差8个小时,在网上查找资料后发现是因为两个系统的设置不一样,Windows 与 Linux 缺省看待系统硬件时间的方式是不一样的:

Windows把系统硬件时间当做本地时间,即其时间适合BIOS中显示的时间是一样的;
Linux系统则把硬件时间当做UTC,操作系统显示的时间是硬件时间经过换算得来的,也就是我们在第八时区,所以硬件时间的基础上再加8个小时。

解决方式:
修改 Windows 对硬件时间的对待方式,这样只在 Windows 上修改后就无需在Ubuntu 上设置了。
让 Windows 把硬件时间当作 UTC
开 始->运行->CMD,打开命令行程序(Vista则要以管理员方式打开命令行程序方可有权限访问注册表),在命令行中输入下面命令并回车

Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
2012-10-12 16:25:22 liuguxing 阅读数 477
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20510 人正在学习 去看看 马永亮

date +时间格式化字符串

当前时间:

[root@x msgstat]# date +%Y_%m_%d

2012_10_12

指定某一天:

[root@x msgstat]# date -d'2012/03/12' +%Y_%m_%d
2012_03_12

注意格式只能是-d'2012/03/12' 

在这一天上加减一天:

[root@x msgstat]# date -d'2012/03/12 -1day' +%Y_%m_%d
2012_10_11

[root@gltsm msgstat]# date -d'2012/03/12 +1day' +%Y_%m_%d
2012_10_13

2017-07-27 10:38:25 qq_23100787 阅读数 1752
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20510 人正在学习 去看看 马永亮

有一个非常简单的办法能够解决这个问题,那就是通过时间序列的办法。

要知道所有时间都能够化成秒,所以我们的原理就是
(时间化成秒)—-》(加减秒)—-》(加减完的秒时间然后再化成格式化的时间)

具体代码如下:

功能为在1990-01-01 01:01:01这个时间基础上加上1个小时20分钟,思路为先把时间化成秒,然后加上1个小时二十分钟所对应的秒,然后再格式化时间

#!/bin/bash
time1=$(date +%s -d '1990-01-01 01:01:01')  #将时间化为秒
time2=$((1*60*60+20*60))  #一个小时二十分钟所对应的秒  
time1=$(($time1+$time2))  #加上一个小时二十分钟
time1=$(date +%Y-%m-%d\ %H:%M:%S -d "1970-01-01 UTC $time1 seconds");#格式化时间
echo "时间为"+$time1

总结

如果是减去某个时间的话,就把把加号换成减号就可以了。这个事情比较有通用性,因为无论是加减分钟还是小时还是秒,都可以统一的化成秒然后对应起来了。

2016-12-28 17:55:44 SjmMx1314aini 阅读数 679
  • Linux系列之走进Linux新世界

    本课程为全新马哥Linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    20510 人正在学习 去看看 马永亮

一 修改时间格式:

     时间显示指令为“date”那么修改时间则是在“date”这个指令后面添加参数。

     参数:+%H:%M%S:%r        ###就可以显示小时:分钟:秒:AM/PM 

没有更多推荐了,返回首页