树莓派系统时间不对

27-1
从图中我们可以知道上次登录时间是1970年1月1日星期四的00:03:17分,由此我们可以推断,新安装系统的树莓派默认系统时间应该是1970年1月1日开始的。
很明显,这个时间与我们期望的当前时间是不符的。我们需要将系统时间修改为和当前时间同步。

第一步:启用网络时间协议

为了保证时间的准确性,推荐使用NTP网络时间协议来同步时间。对的,跟windows中的 Internet 时间同步是一样一样的。
运行以下命令,启用NTP:

sudo timedatectl set-ntp true

启用NTP以后,时间就是正常的吗?我们来通过date命令来查看当前时间:

ubuntu@localhost:/etc$ date
Mon Apr  6 08:45:50 UTC 2015

年月日都对了,但是现在是16点啊,系统时间显示的确是08点,相差8个小时。
这个时候,多年的开发经验告诉我们,天朝时间比标准时间早8个小时。
我们还想date命令出来的时间与我们的时间完全保持一致,就需要进行第二步操作修改时区。

第二步:修改时区

使用以下命令修改本地时区:

sudo dpkg-reconfigure tzdata

27-2
在“Configuring tzdata”中,依次选择Asia、Chongqing,回车确认,出现了以下提示信息:

cp: cannot create regular file '/etc/localtime.dpkg-new': Read-only file system                                  

Current default time zone: 'Asia/Chongqing'
Local time is now:      Mon Apr  6 08:49:52 UTC 2015.
Universal Time is now:  Mon Apr  6 08:49:52 UTC 2015.

debconf: DbDriver "config": could not write /var/cache/debconf/config.dat-new: Read-only file system

简单来说,就是文件系统是只读的,不能创建etc/localtime.dpkg-new文件和不能写config.dat-new文件。
当前默认的时区是已经改成了我们想要的’Asia/Chongqing’,但是本地时间和世界时间还是一样的,这里还有问题,应该就是只读文件系统造成时区没有完全配置。

第三步:使文件系统可写

通过askubuntu找到了Read-only file system问题的解决办法,运行以下命令使得文件系统可写。

sudo mount -o rw,remount /

第四步:重复第二步修改时区

这一次重新配置时区就比较顺利了。本地时间变成了CST时间,也就是China Standard Time UTC+8:00 中国沿海时间(北京时间)。

Current default time zone: 'Asia/Chongqing'
Local time is now:      Mon Apr  6 16:55:50 CST 2015.
Universal Time is now:  Mon Apr  6 08:55:50 UTC 2015.

ubuntu@localhost:/etc$ date
Mon Apr  6 17:19:56 CST 2015
ubuntu@localhost:/etc$ timedatectl status
      Local time: Mon 2015-04-06 17:36:36 CST
  Universal time: Mon 2015-04-06 09:36:36 UTC
        RTC time: n/a
       Time zone: Asia/Chongqing (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

后记 设置硬件时钟PCF8563

保证计算机的时间准确性是一个非常重要的事情,特别是我们基于树莓派还开发一些开关或者数据监控应用,如果时间不准确,可能会引发一些不必要的问题。
设置 RTC 时钟工作配置
打开 /boot/config.txt

 sudo vim /boot/config.txt 

config.txt文档末尾添加一行:

#时钟芯片为pcf8563:
dtoverlay=i2c-rtc,pcf8563

#时钟芯片为ds1307:
dtoverlay=i2c-rtc,ds1307

修改 rc.local 文件命令:

sudo vim /etc/rc.local

在文件末尾 ,在 exit 0 这一行之前,加入该命令用来从RTC中同步时间到本地时间:

sudo hwclock -s

如果是树莓派 3,无法识别时钟,可以在/etc/rc.local 的 exit 0 这一行之前再加入一句 :
时钟芯片为pcf8563:

sudo echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device

时钟芯片为ds1307:

sudo echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

树莓派 4 不能加这一句,会造成 rc.local 启动错误。
修改/boot/config.txt 后需要重启树莓派。重启后打开命令行终端,用命令 timedatectl 查看时钟,RTC time 后面出现时间就表示时钟已经工作了。
27-3
如果时钟第一次上电池的时候时钟是混乱的,可以用下面的指令设置一下时钟:

sudo hwclock -w

尤其是PCF8563,首次上电必须使用过这个命令,系统才能对其进行同步,DS1307也不是很省心,电池不装上I2C通讯也会不正常,DS1307的datasheet里面要求不装电池的时候,需要短路电池的两个电极。