Linux date 命令用于显示系统日期和时间。 date 命令可以用于设置系统的日期和时间。 默认情况下,date 命令显示配置 unix/linux 操作系统的时区中的日期。如果你是超级用户 (root) ,才可以更改日期和时间。

Linux date 命令语法

Linux date 命令显示和设置系统日期和时间。 此命令还允许用户以不同格式打印时间并计算未来和过去的日期。

date [选项]… [+格式]
date [选项] [MMDDhhmm[[CC]YY][.ss]]


格式 FORMAT 控制着输出格式. 仅当选项指定为全球时间时本格式才有效。 分别解释如下:

       %%     文本的 %%a     当前区域的星期几的简写 (Sun..Sat)%A     当前区域的星期几的全称 (不同长度) (Sunday..Saturday)%b     当前区域的月份的简写 (Jan..Dec)%B     当前区域的月份的全称(变长) (January..December)%c     当前区域的日期和时间 (Sat Nov 04 12:02:33 EST 1989)%d     (月份中的)几号(用两位表示) (01..31)%D     日期(按照 月/日期/年 格式显示) (mm/dd/yy)%e     (月份中的)几号(去零表示) ( 1..31)%h     同 %b%H     小时(按 24 小时制显示,用两位表示) (00..23)%I     小时(按 12 小时制显示,用两位表示) (01..12)%j     (一年中的)第几天(用三位表示) (001..366)%k     小时(按 24 小时制显示,去零显示) ( 0..23)%l     小时(按 12 小时制显示,去零表示) ( 1..12)%m     月份(用两位表示) (01..12)%M     分钟数(用两位表示) (00..59)%n     换行%p     当前时间是上午 AM 还是下午 PM%r     时间,按 12 小时制显示 (hh:mm:ss [A/P]M)%s     从 1970年1月1日0点0分0秒到现在历经的秒数 (GNU扩充)%S     秒数(用两位表示)(00..60)%t     水平方向的 tab 制表符%T     时间,按 24 小时制显示(hh:mm:ss)%U     (一年中的)第几个星期,以星期天作为一周的开始(用两位表示) (00..53)%V     (一年中的)第几个星期,以星期一作为一周的开始(用两位表示) (01..52)%w     用数字表示星期几 (0..6); 0 代表星期天%W     (一年中的)第几个星期,以星期一作为一周的开始(用两位表示) (00..53)%x     按照 (mm/dd/yy) 格式显示当前日期%X     按照 (%H:%M:%S) 格式显示当前时间%y     年的后两位数字 (00..99)%Y     年(用 4 位表示) (1970...)%z     按照 RFC-822 中指定的数字时区显示(如, -0500) (为非标准扩充)%Z     时区(例如, EDT (美国东部时区)), 如果不能决定是哪个时区则为空默认情况下,用 0 填充数据的空缺部分.  GNU 的 date 命令能分辨在 `%'和数字指示之间的以下修改.`-' (连接号) 不进行填充 `_' (下划线) 用空格进行填充

如何在 Linux 中使用 date 命令,要显示当前系统时间和日期,请输入 date 命令:

输出显示星期几、月份中的哪一天、月份、年份、当前时间和时区。 默认情况下,date 命令设置为操作系统的时区。

Linux 日期命令格式选项

要格式化 date 命令的输出,可以使用以 + 号开头的控制字符。 格式控件以 % 符号开头,并由它们的当前值代替。

在这里,%Y 字符替换为当前年份,%m 替换为月份,%d 替换为月份中的第几天:

以 mm-dd-yy 格式显示日期,打开终端并输入以下日期命令:

只需将日期显示为 mm/dd/yy 格式:
只显示时间:


要显示语言环境的 12 小时时钟时间,请输入:
要以 HH:MM 格式显示时间:


如何将时间/日期格式保存到 shell 变量?在 shell 提示符下键入以下命令即可获取 MM-DD-YYYY 格式的当前日期。

#!/bin/bash
NOW=$(date +"%m-%d-%Y")
FILE="backup.$NOW.tar.gz"
echo "Backing up data to /opt/time.$NOW.tar.gz file, please wait..."

date -u 选项

显示或设置全球时间(格林威治时间)

CST:中国标准时间(China Standard Time),这个解释可能是针对RedHat Linux。

UTC:协调世界时,又称世界标准时间,简称UTC,从英文国际时间/法文协调时间”Universal Time/Temps Cordonné”而来。中国大陆、香港、澳门、台湾、蒙古国、新加坡、马来西亚、菲律宾、澳洲西部的时间与UTC的时差均为+8,也就是UTC+8。

GMT:格林尼治标准时间(旧译格林威治平均时间或格林威治标准时间;英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。

date -d选项

–date 或-d 选项:以日期格式显示给定的日期字符串。 但这不会影响系统的实际日期和时间值。而是使用以字符串形式给出的日期和时间。

显示过去的日期

在 Linux 中使用 --date 选项显示过去的日期。 date 命令接受诸如“tomorrow”、“Friday”、“last Friday”、“next Friday”、“next week”等值。 因此,使用以下字符串打印过去的日期:

显示未来日期

–date 选项还可以显示未来的日期。 与过去的日期一样,您可以输入字符串来打印即将到来的日期:

在 Linux 中设置或更改日期

要手动更改系统时钟,请使用 set 命令。 例如,要将日期和时间设置为 2021 年 12 月 13 日下午 5:30,请键入:

date --set=“2021213 05:30”

大多数 Linux 发行版都使用 ntp 或 systemd-timesyncd 服务同步系统时钟,因此手动设置时钟时要小心。

date命令代码实现

int main(int argc, char *argv[])
{const char *errstr;struct tm *tp;int ch, rflag;char *format, buf[1024], *outzone = NULL;const char *pformat = NULL;long long val;rflag = 0;while ((ch = getopt(argc, argv, "af:jr:uz:")) != -1)switch(ch) {case 'a':slidetime = 1;break;case 'f':      /* 用 strptime 解析  */pformat = optarg;break;case 'j':     /* 不要设置 */jflag = 1;break;case 'r':      /* 用户指定的秒数 */rflag = 1;//tval = strtonum(optarg, LLONG_MIN, LLONG_MAX, &errstr);//if (errstr)//   errx(1, "seconds is %s: %s", errstr, optarg);         val = strtoll(optarg, &buf, 0);tval = (time_t)val;                break;case 'u':       /* 在 UTC 中做所有事情  */if (setenv("TZ", "UTC", 1) == -1)err(1, "cannot unsetenv TZ");break;case 'z':outzone = optarg;break;default:usage();}argc -= optind;argv += optind;if (!rflag && time(&tval) == -1)err(1, "time");/* 要格式化 date 命令的输出,您可以使用以 + 号开头的控制字符*/format = "%a %b %e %H:%M:%S %Z %Y";/* 允许任何顺序的操作数 */if (*argv && **argv == '+') {format = *argv + 1;argv++;argc--;}if (*argv) {setthetime(*argv, pformat);argv++;argc--;}if (*argv && **argv == '+') {format = *argv + 1;argc--;}if (argc > 0)errx(1, "too many arguments");if (outzone)setenv("TZ", outzone, 1);tp = localtime(&tval);if (tp == NULL)errx(1, "conversion error");strftime(buf, sizeof(buf), format, tp);printf("%s\n", buf);return 0;
}#define    ATOI2(ar)   ((ar) += 2, ((ar)[-2] - '0') * 10 + ((ar)[-1] - '0'))
void setthetime(char *p, const char *pformat)
{struct tm *lt, tm;struct timeval tv;char *dot, *t;time_t now;int yearset = 0;lt = localtime(&tval);lt->tm_isdst = -1;            /* correct for DST */if (pformat) {tm = *lt;if (strptime(p, pformat, &tm) == NULL) {fprintf(stderr, "trouble %s %s\n", p, pformat);badformat();}lt = &tm;} else {for (t = p, dot = NULL; *t; ++t) {if (isdigit((unsigned char)*t))continue;if (*t == '.' && dot == NULL) {dot = t;continue;}badformat();}if (dot != NULL) {           /* .SS */*dot++ = '\0';if (strlen(dot) != 2)badformat();lt->tm_sec = ATOI2(dot);if (lt->tm_sec > 61)badformat();}elselt->tm_sec = 0;switch (strlen(p)) {case 12:                /* cc */lt->tm_year = (ATOI2(p) * 100) - 1900;yearset = 1;case 10:             /* yy */if (!yearset) {/* mask out current year, leaving only century */lt->tm_year = ((lt->tm_year / 100) * 100);}lt->tm_year += ATOI2(p);case 8:                  /* mm */lt->tm_mon = ATOI2(p);if ((lt->tm_mon > 12) || !lt->tm_mon)badformat();--lt->tm_mon;            /* time struct is 0 - 11 */case 6:                  /* dd */lt->tm_mday = ATOI2(p);if ((lt->tm_mday > 31) || !lt->tm_mday)badformat();case 4:                  /* HH */lt->tm_hour = ATOI2(p);if (lt->tm_hour > 23)badformat();case 2:                   /* MM */lt->tm_min = ATOI2(p);if (lt->tm_min > 59)badformat();break;default:badformat();}}/* 将故障时间转换为 UTC 时钟时间  */if (pformat != NULL && strstr(pformat, "%s") != NULL)tval = timegm(lt);elsetval = mktime(lt);if (tval == -1)errx(1, "specified date is outside allowed range");if (jflag)return;/* 设置时间  */if (slidetime) {if ((now = time(NULL)) == -1)err(1, "time");tv.tv_sec = tval - now;tv.tv_usec = 0;if (adjtime(&tv, NULL) == -1)err(1, "adjtime");} else {tv.tv_sec = tval;tv.tv_usec = 0;if (settimeofday(&tv, NULL))err(1, "settimeofday");}if ((p = getlogin()) == NULL)p = "???";syslog(LOG_AUTH | LOG_NOTICE, "date set by %s", p);
}

总结

本篇讲解如何在 Linux 和类 Unix 系统上格式化日期。 有关更多信息,请使用 man 命令查看。

欢迎关注微信公众号【程序猿编码】,需要date命令完整源码的添加本人微信号(c17865354792)

Linux下date命令详解及C/C++代码实现相关推荐

  1. Linux下dirname命令详解及C/C++代码实现

    dirname命令的基本用法非常简单--只需写下命令名,后跟文件的绝对名称即可. 在输出中,将获得完整的目录树,但文件名除外. linux dirname 命令 以下是 dirname 命令的通用语法 ...

  2. Linux下rm命令详解及C/C++代码实现

    rm 命令是 Unix/Linux 操作系统中的基本命令之一.rm(即删除)命令用于删除 Linux 和其他类 Unix 操作系统上的文件和目录.此命令通常以静默方式运行,运行 rm 命令时应非常小心 ...

  3. Linux下uniq命令详解及C/C++代码实现

    Linux uniq 命令用于从文件中删除所有重复的行. 此外,它还可用于显示任何单词的计数.仅重复行.忽略字符以及比较特定字段. 它是 Linux 系统中最常用的命令之一. uniq 命令使用 Un ...

  4. Linux下zcat命令详解及C/C++代码实现

    如果一个压缩文件非常大,而您只想查看文件的内容是什么. 由于在这种情况下,文件的解压将花费大量时间,因此为了节省时间并在不解压文件的情况下查看文件,可以使用zcat命令. zcat 命令 通常 zca ...

  5. Linux下touch命令详解及C/C++代码实现

    touch 命令是创建新的空文件的最简单方法.它还用于更改现有文件和目录的时间戳(即最近访问和修改的日期和时间),是 UNIX/Linux 操作系统中使用的标准命令. touch 命令 touch的语 ...

  6. Linux下chmod命令详解及C/C++代码实现

    Linux 中对文件的访问由文件权限.属性和所有权控制. 因此,只有授权的用户和进程才能访问文件和文件夹.本篇使用 chmod 命令更改文件和目录的访问权限. Linux 文件权限 在这之前,让我们先 ...

  7. linux系统rar命令行,Linux下rar命令详解

    Linux下rar命令详解 发布时间:2010-05-24 23:28:23   作者:佚名   我要评论 通常rar命令由一个主命令加若干选项(可选)构成,操作文档为操作施加的.rar文件对象,文件 ...

  8. linux远程date命令,linux之date命令详解

    date命令的用处 1.用于显示特殊的时间格式,可以用于对日志文件的命名 2.用于设置时间 ,不过这方面用的比较少,因为一般的服务器都设置的有自动同步网络时间 用法: date [OPTION]... ...

  9. linux下dd命令详解

    linux下dd命令详解    名称: dd 使用权限: 所有使用者dd 这个指令在 manual 里的定义是 convert and copy a file 使用方式: dd [option] 如果 ...

最新文章

  1. 关于笔记本电脑玩一些游戏不能全屏的注册表修改法
  2. error C2065: “IDD_DIALOG1”: 未声明的标识符
  3. Python之 jinja2模板浅析
  4. 程序员如何保持身心健康
  5. 微服务架构日志集中化 安装 EFK (Fluentd ElasticSearch Kibana) 采集nginx日志
  6. EMR StarRocks 极速数据湖分析原理解析
  7. 【UI设计师必备】可临摹精美的APP UI Kit模板
  8. laravel 5.2 Auth用户认证教程
  9. 全球最年轻的Python程序员;13 岁创建 RISC-V 内核,后浪程序员有多恐怖?
  10. 区分级数收敛和数列收敛
  11. Java导入导出Excel控件简介
  12. php第三方支付sdk,第三方支付 SDK
  13. 最新上架 App Store 全流程
  14. Skynet服务器框架(八) 任务和消息调度机制
  15. 追书神器 三星s8+ 语音朗读锁屏后中断问题解决办法
  16. 29 Redis 应对并发访问的无锁原子操作
  17. 1100 Mars Numbers (20分)
  18. JavaScript之Soft排序
  19. 物联网浪潮之下如何从 0 到 1开启智能化硬件开发?
  20. mysql教程虫师_python使用mysql数据库 - 虫师

热门文章

  1. 网络稳定的第二道屏障: 带外网络DHCP异常排查方案
  2. mysql中视图和表的区别及联系,mysql 中视图和表的区别以及联系是什么?
  3. win11使用git客户端 下载代码
  4. acwing 1078. 旅游规划(求树直径上的点)
  5. VUE插槽/插槽传参
  6. Proxmark3命令帮助
  7. 【Java基础】JAVA实现根据文件格式对文件夹内容进行复制
  8. 48天四川西藏自助游归来。九寨沟+川藏南线+阿里大北线
  9. C语言如何改变字符串的值,C语言中字符串的赋值
  10. 分布式基础-负载均衡