`

linux的时间问题

 
阅读更多

https://blog.csdn.net/yin138/article/details/52765089 

本文中的测试都是在Centos 7.4.1708内核的系统上进行的

 

本初子午线与日期变更线

大航海时代人类为了在航海时进行定位,为地球表上经纬度。纬度不谈,经度上当时的海上霸主将经过自己首都伦敦的一条线定为0度,这条线就是本初子午线。然后向东到东经180度,向西到西经180度。这为后面时区的划分打下基础。一天24小时,以太阳在当地的正当中为中午12点,如果每个地方都已自己所在的地方计算时间,想象南京跟上海还要计算时差那真的乱套了。于是就以经度为基础将地球划分时区,同一时区的时间就以时区中间线时间为标准时。当时定下的规矩是划分为24个时区,15度为一个时区,本初子午线左右,东经7.5度西经7.5度为中时区,东经7.5到东经22.5度为东一区,类推东经172.5到西经172.5为东西十二区。

标准时很大程度上解决了各地时刻混乱的现象,使得世界上只有24个时刻存在。但是还有一个问题,当你从一个地方往东走一个时区需要将你的表往前拨一个小时,那从西向东绕地球一圈回到原地就比原来快了一天。因此认为定了一条线,当你从西向东越过这条线日期要减一天,反之加一天。这条线就叫日期变更线。日期变根线是经度180度上的一条折现,为的是避免穿过某些国家带来麻烦

 

GMT、UTC、CST

GMT(Greenwich Mean Time)格林尼治时间,表示格林尼治所在时区的标准时间。UTC(Universal Time Coordinated)通用协调时,也是表示格林尼治当地时间。不过GMT是根据地球自转公转来计算时间,UTC是根据原子钟计算时间,可以看成UTC是更精准的GMT。在程序开发中这两个时间基本没差别。CST可以指四个不同的时区:

Central Standard Time(USA) UT-6:00

Central Standard Time(Australia) UT+9:30

China Standard Time  UT+8:00

Cuba Standard Time UT-4:00

在中国自然指的是中国的标准时间

 

linux时间

linux系统中有两种时钟,一种是硬件时钟 是由纽扣电池供电的“Real Time Clock”也叫做RTC(实时时钟)或者叫CMOS时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的。当系统启动时,内核通过读取RTC来初始化系统时间,该时间存放在xtime变量中。所谓系统时间也就是当前的实际时间。

date系统时间

linux中操作系统时间的是函数date

date 显示当前系统时间
date -s  "yyyy-MM-dd HH:mm:ss" 设置系统时间

date显示哪个时区的时间跟环境变量TZ和/etc/localtime文件有关系,它的判断逻辑是:

1.查找环境变量TZ,若变量存在且值不为空,则到/usr/share/zoneinfo目录下找到值对应的时区文件的真实内容作为系统时间时区
2.若TZ环境变量存在,而值为空,则系统时区为UTC
3.若环境变量TZ不存在,则查找/etc/localtime时区文件的真实内容作为时区

这里为什么说真实内容呢。租的云服默认/etc/localtime是/usrl/share/zoneinfo/Asia/Shanghai的软链接。百度上有些文章说想要date显示GMT时间,使用命令 cp /usr/share/zoneinfo/GMT /etc/localtime,这时候会提示是否覆盖原文件,选y。输入date命令确实是显示GMT时间了。但是这里的操作其实是用GMT文件替换了Shanghai文件。这时候你还想使用Shanghai这个时区,cp  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime。发现还是GMT时间,因为文件名是Shanghai其实内容已经替换成GMT的。

所以想要通过修改/etc/localtime来改变时区,正确的做法是将软链接指向另一个时区文件,ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

java获取linux系统时间

java获取linux时间的时区与环境变量TZ、/etc/timezone、/etc/localtime文件有关系,判读机制是:

1.如果环境变量TZ存在,且值不为空,则根据变量值判定时区。(这里与date不一样的地方是它并不会去/usr/share/zoneinfo下面找文件的实际内容,只根据名称判断)
2.若环境变量TZ值为空、或变量不存在,则根据 /etc/timezone文件中的值判断时区
3.最后根据 /etc/localtime文件名,或链接的文件名判断时区,与文件具体内容无关

 可以通过以下代码,然后修改环境变量TZ、/etc/timezone、/etc/localtime 进行测试

import java.util.Date;
import java.util.TimeZone;
public class TimeTest {
    public static void main(String args[]) {
	long time = System.currentTimeMillis();
	String millis = Long.toString(time);
	Date date = new Date(time);
	System.out.println("Current time in milliseconds = " + millis + " => " + date.toString());
	System.out.println("Current time zone: " + TimeZone.getDefault().getID());
    }
}

硬件时间

hwclock命令用户查看硬件时间,命令显示时间的时区与date判断逻辑一样,可以参考上面。网上说硬件时间与/etc/sysconfig/clock 有关,测试感觉这个配置文件在时间显示上没有发生作用。。

hwclock命令

hwclock 查看硬件时间

hwclock --systohc 或 hwclock -w  将系统时间同步到硬件时间

hwclock --hctosys 将硬件时间同步到系统时间

hwclock --set --date [时间]  设置硬件时间 ,后面时间格式是多样的,可以自己试

设置系统时间与网络时间同步

yum -y install ntp ntpdate 安装同步工具

ntpdate cn.pool.ntp.org 或 ntpdate -u ntp.api.bz  同步网络时间到系统时间

分享到:
评论

相关推荐

    LINUX 下C++ 获取系统时间和设置时间

    在Linux环境下,使用C++获取和设置系统时间是一项常见的任务,尤其在开发系统级程序时。本文将详细探讨如何利用C++在Linux中操作时间。 首先,我们需要了解Linux中的时间模型。在Linux中,时间主要分为两类:系统...

    linux ntp时间同步设置

    ### Linux NTP时间同步设置详解 #### 一、概述 在Linux系统中,时间的准确性对于许多服务至关重要,比如日志记录、定时任务等。为了确保时间的精确性,Linux通常采用NTP(Network Time Protocol)协议来进行时间...

    linux时间同步方法

    Linux 时间同步方法 Linux 时间同步是指计算机系统中同步时间的过程,以确保系统时间的准确性和一致性。本文将探讨三种常见的 Linux 时间同步方法:使用 ntpdate 命令、使用 rdate 同步时间和使用 Network Time ...

    修改linux时间。现在才真正弄明白。。。。

    在Linux系统中,时间管理是一项基础且重要的任务。这篇博文主要探讨了如何修改Linux系统的时间,这涉及到系统硬件时钟...通过熟练掌握这些技巧,我们可以确保系统的时间准确性,从而避免因时间问题导致的各种问题。

    linux与windows时间同步

    ### Linux与Windows时间同步 在跨平台开发或运维过程中,保持不同操作系统的服务器时间一致是一项基本但又重要的任务。本文将详细介绍如何通过Network Time Protocol(NTP)协议实现Linux与Windows系统之间的时间...

    解决linux内网时间不同步问题

    本篇文章将详细探讨如何解决Linux内网时间不同步的问题,并提供一个案例——开启Windows XP作为NTP时间服务器。 首先,了解时间同步的基本原理。网络时间协议(Network Time Protocol,简称NTP)是一种用于同步网络...

    linux10-时间任务,nfs

    Linux 时间任务 nfs Linux 时间任务是指操作系统中执行特定任务的机制,包括 at、crond 和 anacron 等服务。这些服务可以根据预设的时间点或系统负载情况执行特定的命令或脚本。 at 服务是 Linux 中的一种时间任务...

    linux的Qt设置系统时间

    总结,通过Qt 4.8.5,我们可以利用`QDateTime`和`QProcess`类来获取和设置Linux系统的日期和时间,以及管理时区。在进行这些操作时,理解Linux的命令行工具和权限管理是非常重要的。同时,要确保代码的安全性和用户...

    Java设置linux系统时间

    利用Java代码设置Linux系统时间。设置时间精确到毫秒级别。

    linux系统上使用qt修改开发板时间

    在Linux系统上,开发人员有时需要对开发板的时间进行调整,特别是在进行自动化测试或系统调试时。Qt是一个流行的跨平台应用程序开发框架,它提供了丰富的GUI控件,包括QTimeEdit和QDateEdit,用于处理时间和日期。本...

    LINUX下时间日期操作

    当进行问题排查时,正确的时间对于理解日志事件的顺序至关重要。 8. **时间日期格式化** `date`命令可以按照指定的格式输出时间,例如,`date +%Y-%m-%d_%H-%M-%S`将输出形如"2023-03-15_14-30-00"的格式。 9. **...

    linux系统时间和硬件时钟问题(date和hwclock)

    ### Linux系统时间和硬件时钟问题详解 #### 一、核心概念理解 在深入探讨Linux系统时间和硬件时钟的问题之前,我们需要先明确几个重要的概念。 **1. 系统时间与硬件时间** - **系统时间**: 当我们在Linux系统中...

    linux 系统时间设置方法

    Linux 系统时间设置方法 Linux 系统时间设置是指通过编程方式或命令行方式设置 Linux 系统的时间。在 Linux 系统中,时间设置是非常重要的,因为空间时间的正确性直接影响到系统的稳定性和安全性。 一、编程方式...

    Linux下读取RTC时间

    可以在Linux系统下读取RTC芯片的内部时间,同时实现了读取系统内部自身时间的功能。亲测在Ubuntu下可用!

    Linux时间子系统.pdf

    Linux时间子系统是一个复杂的主题,它涉及到操作系统内核中负责处理时间相关的功能。在Linux系统中,时间子系统不仅包括了对时间的简单读取,还包括了时间的管理、同步、调度等多个方面。下面将基于提供的文件内容,...

Global site tag (gtag.js) - Google Analytics