- 浏览: 452535 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
zjhgx:
多谢,多谢。多谢
Ubuntu 中软件的安装、卸载以及查看的方法总结 -
37du:
受教了,对于理解运行过程有很好的效果
ActionMapper---webwork 2.1到2.2 的变化 -
chxiaowu:
非常好,谢谢!
Ubuntu 中软件的安装、卸载以及查看的方法总结 -
euii:
谢谢,这样的总结。
Ubuntu 中软件的安装、卸载以及查看的方法总结 -
xiaoyao3857:
谢谢,正需要这样的汇总型字典!
Ubuntu 中软件的安装、卸载以及查看的方法总结
时间与日期
通常对于 一个程序来说可以确定时间与日期是十分用的。也许他要记录其运行的时间,或者是他要一个特定的时间改变其形为。例如,一个游戏程序也许不会在工作时间运 行,或者是一个备份调度会在启动自动备份之前等待早些的工作完成。
所有的Unix 系统对于时间与日期都使用相同的起始点:1970年1月1日午午夜GMT。这是Unix的创世纪,而Linux也不例外。而在Linux系统中所有的时间 都是以秒记量的。这与MS-DOS处理时间的方式相似,所不同是MS-DOS是由1980年开始的。其他的系统使用其他的记时起始时间。
时间是使用一个定义的time_t类型来处理。这是一个足够大的整数类型来包含以秒计的日期与时间 值。在Linux系统上,他是一个长整数,其定义以及相关的操作函数都定义在头文件time.h中。
不要认为时间是32位的。在Unix以及Linux系统上使用一个32位的time_t类型,而这 个时间会在2038年重叠。到那时,我们希望这些系统都使用一个大于32位的time_t类型。
#include <time.h>
time_t time(time_t *tloc);
我们可以调用time函数来得到一个底层 的时间值,这个函数会返回由纪元起点开始的秒数。如果tloc不为空指针,函数就会将返回值写入tloc所指的变量中。
试验--时间
这里是一个简 单的时间程序,envtime.c,来演示time函数:
#include <time.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
int i;
time_t the_time;
for(i = 1; i <= 10; i++) {
the_time = time((time_t *)0);
printf(“The time is %ld\n”, the_time);
sleep(2);
}
exit(0);
}
当我们运行这个程序时,他会每隔2秒打印出底层时间值。
$ ./envtime
The time is 1044695820
The time is 1044695822
The time is 1044695824
The time is 1044695826
The time is 1044695828
The time is 1044695830
The time is 1044695832
The time is 1044695834
The time is 1044695836
The time is 1044695838
工作原量
这个程序使用一个 空指针参数来调用time函数,这个函数会返回以秒计的时间与日期值。程序会休眠2秒,并且重复调用time函数10次。
使用由1970年开始的以秒计的时间与日期值对于估量某件事持续多少时间是十分有用的。我们只需要 简单的使用两个由time调用得到的时间进行减法操作即可。然而结过仔细的考虑,ISO/ANSIC C标准委员会并没有说时time_t类型要用于计量以秒计的时间间隔值,所以他们开发了一个函数,difftime,这个函数会计算两个time_t值之 间的间隔,并且返回一个double类型:
#include <time.h>
double difftime(time_t time1, time_t time2);
difftime函数计算两个时间值 之间的间隔,并且返回time1-time2的浮点值。对于Linux系统而言,由time返回的值是秒数,并且可以进行操作,但是为了移植考虑,我们应 使用difftime函数。
为了以更为有意义的方式来表示时间与日期,我们需要将 时间值转换为可以识别的时间与日期。这有标准的函数可以帮助我们做到。
gmtime 函数将底层的时间值分隔并且存放到包含更为通用域的一个结构中:
#include <time.h>
struct tm *gmtime(const time_t timeval);
tm结构的定义至少包含下列成员:
成员 描述
int tm_sec 秒,0-61
int tm_min 分,0-59
int tm_hour 时,0-23
int tm_mday 一月中的天,1-31
int tm_mon 一年中的月,0-11(一月为0)
int tm_year 由1900年起的年数
int tm_wday 一星期中的天,0-6(星期日为0)
int tm_yday 一年中的天,0-365
int tm_isdst 有效的白天数
试验--gmtime
这里 有一个程序,gmtime.c,使用tm结构与gmtime函数打印当前时间与日期:
#include <time.h>
#include <stdio.h>
int main()
{
struct tm *tm_ptr;
time_t the_time;
(void) time(&the_time);
tm_ptr = gmtime(&the_time);
printf(“Raw time is %ld\n”, the_time);
printf(“gmtime gives:\n”);
printf(“date: %02d/%02d/%02d\n”,
tm_ptr->tm_year, tm_ptr->tm_mon+1, tm_ptr->tm_mday);
printf(“time: %02d:%02d:%02d\n”,
tm_ptr->tm_hour, tm_ptr->tm_min, tm_ptr->tm_sec);
exit(0);
}
当我们运行这个程序时,我们会得到更可读的时间与日期值:
$ ./gmtime; date
Raw time is 1044696004
gmtime gives:
date: 103/02/08
time: 09:20:04
Sat Feb 8 09:20:04 GMT 2003
工作原理
这个程序调用 time函数得到一个底层的时间值,然后调用gmtime将其转换为一个具有时间与日期值的结构。程序会使用printf函数打印输出。严格来讲,我们不 应使用这种方式打印原始时间,因为并不能保证在所有的系统他都是一个long类型。在gmtime函数之后,我们立即运行date命令来比较其输出。
然而,在这里我们一个小问题。如果我们在一个不使用格林尼治时间的时区运行这个程序,或者 是我们本地的白天存储时间是有效的(问题?),我们就会注意到这个时间并不正确。这是因为gmtime是使用GMT返回时间。Linux与Unix系统这 样做,从而世界上的程序与系统都是同步的。不同时区在同一时间创建的文件会显示出具有相同的创建时间。要查看本地时间,我们需要使用localtime函 数来代替。
#include <time.h>
struct tm *localtime(const time_t *timeval);
localtime函数与gmtime相同,所不同的是他会返回一个包含为本地时区进行过 调整后的结构。如果我们再次试验gmtime程序,但是使用localtime函数来替换gmtime,我们就会看到一个正确的时间与日期报告。
要将一个打乱的tm结构转换为一个原始的time_t值,我们可以使用mktime函数:
#include <time.h>
time_t mktime(struct tm *timeptr);
如果结构不可以表示为一个time_t值,mktime函数会返回-1。
与date程序所提供的时间与日期等机器值相反,为了友好,我们可以使用asctime与 ctime函数:
#include <time.h>
char *asctime(const struct tm *timeptr);
char *ctime(const time_t *timeval);
asctime函数返回一个代表tm结构timeptr给出的时间与日期的字符串。返回的字符串的 格式如下:
Sun Jun 6 12:30:34 1999\n\0
他总是26个字符长的固定格式。函数ctime与下面的函数调用等同:
asctime(localtime(timeval))
他使用一个原始时间值作为参数,并将其转换为一个更可读的本地时间。
试验--ctime
让我们 使用下面的代码来实际的看一下ctime:
#include <time.h>
#include <stdio.h>
int main()
{
time_t timeval;
(void)time(&timeval);
printf(“The date is: %s”, ctime(&timeval));
exit(0);
}
将其保存为 ctim.c,编译运行,我们应可以看到下面的输出:
$ ./ctime
The date is: Sat Feb 8 09:21:17 2003
工作原理
ctime.c 程序调用time函数来得到一个底层的时间值,然后让ctime来完成所有的困难工作,将其转换为一个可读的字符串并打印输出。
为了可以对实际的时间与日期字符串进行更多的控制,Linux与现代的类Unix系统提供了 strftime函数。这与用在日期与时间上的sprintf函数相类似,且其工作方式也相似:
#include <time.h>
size_t strftime(char *s, size_t maxsize, const char *format, struct tm *timeptr);
strftime 函数会格式化由timeptr指向的tm结构表示的时间与日期,并将其结构放在字符串s中。字符串被指明至少maxsize字符长。format字符串用 来控制写入字符串的字符。与printf相似,他包含要传递到字符串的通常字符与格式化时间与日期元素的转义说明。转义说明包括:
转义符 描述
%a 简写的星期名
%A 全写的星期名
%b 简写的月名
%B 全写的月名
%c 日期与时间
%d 一月中的天,01-31
%H 时,00-23
%I 12小时时钟表示的小时,01-12
%j 一年中的天,001-366
%m 一年中的月,01-12
%M 分,00-59
%P a.m或p.m
%S 秒,00-61
%u 星期中的天,1-7(星期1为1)
%U 一年中的星期,01-53(星期日为一个星期的第一天)
%V 一年中的星期,01-53(星期一为一个星期的第一天)
%w 一个星期中的天,0-6(星期日为0)
%x 本地格式日期
%X 本地格式时间
%y 小于1900的年号
%Y 年
%Z 时区名字
%% A%字符
所以,由date程序所指定的通常日期对应于strftime中的格式化字符串为
“%a %b %d %H:%M:%S %Y”
为了有助于读取日期, 我们可以使用strptime函数,这个函数会将一个表示日期与时间的字符串作为参数,并且创建一个表示同样日期与时间tm结构:
#include <time.h>
char *strptime(const char *buf, const char *format, struct tm *timeptr);
format 字符串的组成与strftime的格式化字符串完全相同。strptime的动作形为与sscanf相似,因为他们都搜索字符串,查找标识的域,然后将他 们写入变量。在这里的变量为依据格式化字符串要填充的tm结构的成员。然而,与strftime的转义字符比起来,strptime的转义字符是不严密 的,因为strptime会在天与月上允许简写与全名两种形式。每一个表示都会匹配strptime中的一个%a说明符。strftime总是在小于10 的数字上添加0,而strptime会将其看作可选的。
strptime会返回 一个指向转换操作中最后一个处理字符之后的字符的指针。如果遇到不可以转换的字符,转换操作就简单的在那里停止。调用程序需要检测以确保所传递的字符都是 可以写入tm结构的有意义的字符。
试验--strftime与strptime
下面我们看一下下面的程序中所使用的转义字符:
#include <time.h>
#include <stdio.h>
int main()
{
struct tm *tm_ptr, timestruct;
time_t the_time;
char buf[256];
char *result;
(void) time(&the_time);
tm_ptr = localtime(&the_time);
strftime(buf, 256, “%A %d %B, %I:%S %p”, tm_ptr);
printf(“strftime gives: %s\n”, buf);
strcpy(buf,”Sat 26 July 2003, 17:53 will do fine”);
printf(“calling strptime with: %s\n”, buf);
tm_ptr = ×truct;
result = strptime(buf,”%a %d %b %Y, %R”, tm_ptr);
printf(“strptime consumed up to: %s\n”, result);
printf(“strptime gives:\n”);
printf(“date: %02d/%02d/%02d\n”,
tm_ptr->tm_year % 100, tm_ptr->tm_mon+1, tm_ptr->tm_mday);
printf(“time: %02d:%02d\n”,
tm_ptr->tm_hour, tm_ptr->tm_min);
exit(0);
}
当我们运行这个程序strftime.c时,我们会得到下面的输出:
$ ./strftime
strftime gives: Sunday 06 June, 11:55 AM
calling strptime with: Sat 26 July 2003, 17:53 will do fine
strptime consumed up to: will do fine
strptime gives:
date: 03/07/26
time: 17:53
工作原理
strftime 程序通过调用time与localtime函数得到当前的本地时间。然后他通过使用一个合适的格式化字符串作为参数来调用strftime将其转换为可读 的格式。为了演示strptime的用法,程序设置了一个包含日期与时间的字符串,然后调用strptime来得到原始的时间与日期值,并且打印输出。转 义字符%R是strptime中%H:%M的简写形式。
在这里要注意的一点就是, 为了可以成功的搜索一个日期,strptime函数需要一个精确的格式化字符串。通常,他并不会精确的搜索由用户读取的时间,除非这个格式是非常严格的。
也许当我们编译strftime.c时,编译器会提出警告。这是因为GNU库默认并没有声 明strftime。这个问题的修正方法就是通过在包含time.h之前添加下面的行来显示的请求X/Open标准特征:
#define _XOPEN_SOURCE
Quote : http://blog.csdn.net/zkx1982/archive/2007/12/21/1957021.aspx
发表评论
-
htonl(),htons(),ntohl(),ntons()--大小端模式转换函数
2010-12-16 16:51 4149不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big ... -
关于Linux静态库和动态库的分析
2010-09-28 10:29 16491.什么是库在windows平台和linux平台下都大量存在着 ... -
Heartbeat
2010-09-01 19:31 1418Heartbeat 项目是 Linux-HA ... -
linux下更改共享内存的最大值
2010-07-26 13:22 6080System V IPC 参数 名字 ... -
环境变量相关
2010-06-10 15:03 1022系统环境变量: /etc/profile:此文件 ... -
linux中的信号处理(signal与alarm)
2010-05-12 15:25 1800简单处理程序: ... -
IPC之消息队列
2010-03-13 12:05 1445消息队列缺点: 1. 如果进程创建了一个消息队列,在该队 ... -
如何让errno多线程/进程安全
2010-03-13 11:35 1791在 linux 或者 unix 环境中, errno ... -
Linux下库相关的概略介绍及动态库的搜索路径优先级
2010-03-13 11:29 1669(本文主要针对动态连接 ... -
ftok函数
2010-03-13 11:01 1786系统建立IPC通讯(如消 ... -
About pci.ids
2009-12-23 21:01 1773pci.ids - This is a public r ... -
port I/O
2009-12-21 15:27 1227Name outb, outw, outl, outsb ... -
udev相关
2009-12-11 20:22 1203udev 是Linux kernel 2.6系 ... -
SMP(Symmetrical Multi-Processing)
2009-12-11 15:22 1768对称多处理" ... -
功能强大的sed命令
2009-11-27 21:55 2045vim不太熟练,发现shell的sed命令很强大。 1. S ... -
/etc/sudoers配置文件的格式
2009-11-25 20:56 1658-------下面文章转载自网 ... -
/etc/sudoers中的含义
2009-11-25 20:55 2547Sudo 是允许系统管理员让普通用户执行一些或者全部的roo ... -
linux下如何模拟按键输入和模拟鼠标
2009-11-14 10:06 2850查看/dev/input/eventX是什么类型的事件, ca ... -
Linux root file system
2009-11-05 20:03 10971. Linux for PowerPC Embedded S ... -
Linux下库相关的概略介绍及动态库的搜索路径优先级
2009-10-31 18:24 2137(本文主要针对动态连接库,内容来源网络,重新整理之,高亮部分的 ...
相关推荐
Linux QT4 显示时间日期 在 Linux QT4 应用程序中,如何显示实时的时间和日期是一个常见的需求。本文将通过一个简单的示例程序,演示如何使用 QT4 库在 Linux 平台下显示实时的时间和日期。 第一步:创建 Widget ...
Linux中的日期和时间管理是操作系统的基本功能之一,它涉及到系统的日志记录、程序调度以及网络同步等多个方面。本文将深入探讨Linux系统中的日期时间显示、设置、同步以及通过NTP协议进行时间校准的方法。 首先,...
在Linux终端中,可以使用`date`命令来查看当前的日期和时间。例如,输入`date`后回车,系统会显示当前的年月日、星期以及时间。 2. **设置系统时间** 要更改系统时间,可以使用`date`命令配合`-s`选项。例如,要...
1. **显示当前日期和时间** - 命令格式:`date` - 示例: ```bash date ``` - 输出示例(假设当前时间为2023年7月15日14:30:00): ```plaintext Fri Jul 15 14:30:00 CST 2023 ``` 2. **以特定格式显示...
利用Java代码设置Linux系统时间。设置时间精确到毫秒级别。
这两个命令都与日期和时间管理有关,但它们的功能各有侧重。`touch` 命令主要用于更改文件的时间戳,而 `at` 命令则用于安排在特定时间运行的作业。 #### touch 命令详解 **基本概述** `touch` 命令允许用户更改...
Qt是一个流行的跨平台应用程序开发框架,它提供了丰富的GUI控件,包括QTimeEdit和QDateEdit,用于处理时间和日期。本篇文章将详细介绍如何在Linux环境下利用Qt的这两个控件来修改开发板的时间。 首先,我们需要了解...
`date` 命令用于显示当前系统的日期和时间。 ```bash # date ``` ##### 2. `hwclock` 命令 `hwclock`(Hardware Clock)命令用来读取或写入硬件时钟中的时间。 - 显示硬件时间: ```bash # hwclock ``` - ...
总结,通过Qt 4.8.5,我们可以利用`QDateTime`和`QProcess`类来获取和设置Linux系统的日期和时间,以及管理时区。在进行这些操作时,理解Linux的命令行工具和权限管理是非常重要的。同时,要确保代码的安全性和用户...
硬件时钟主要用于保存系统关机时的日期和时间信息,并在系统启动时将其值传递给系统时钟作为初始设置。 #### 二、Linux时钟的默认设置 在Linux系统中,并没有默认使用哪一个时钟。当系统启动时,硬件时钟会被读取...
在 Linux 系统中,可以使用 date 命令修改日期和时间。 1. 手动修改日期和时间:可以使用 date -s 命令修改日期和时间,例如:date -s 08/24/2006,date -s 13:02:00。 2. 同步 BIOS 时钟:可以使用 clock -w 命令...
在Linux操作系统中,时间管理是一项关键的任务,尤其对于服务器运维人员而言。...通过熟练掌握`date`、`hwclock`或`clock`命令,可以有效地管理Linux系统的日期和时间,从而确保系统和服务的正常运行。
本文将深入探讨如何优化Linux系统的启动时间,并提供一系列实用的技术和工具,帮助用户缩短启动过程。 #### 一、什么是快速启动(Fast Boot) 快速启动指的是最小化系统启动所需的时间。系统启动时间是指从电源...
在本教程中,我们将学习如何配置Linux时间服务器,确保系统时间的精确性。 首先,我们需要确认NTP服务是否已经安装在系统上。可以使用`rpm -qa|grep ntp`命令来检查。如果还没有安装,可以通过包管理器如`yum ...
linux c++ 时间判断
在 Linux 操作系统中,了解如何查看文件的修改日期对于日常的系统管理和文件维护工作至关重要。这篇文章将介绍四种方法帮助你获取文件的这一关键信息。 首先,我们可以使用 `stat` 命令来查看文件的详细属性,包括...
+ 同时修改日期和时间:`date -s "2007-08-03 14:15:00"` * `hwclock -w`:更新硬件时间 这些命令可以在命令行中输入,以设置 Linux 系统的时间。 三、时间设置的重要性 时间设置的正确性对于 Linux 系统的稳定...
Linux 系统的时间日期设定可以通过 date 命令来实现。使用 date命令可以设置系统时间和日期。例如,使用 date -s 2008/05/06 命令可以设置系统日期为 2008 年 5 月 6 日。 在 Linux 系统中,还需要注意 BIOS 时间...