xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

Linux shell script get date and time All In One

Linux shell script get date and time All In One

shell script print current datetime to log file

# ✅ 👍 相对路径 env
#!/usr/bin/env bash

# 仅仅适用于 Python ❌
# 指定文件编码 UTF-8
# coding: utf8

# 👎 绝对路径, 存在错误风险
#!/usr/bin/bash

shell script date

$ date
2023年 04月 12日 星期三 11:58:10 CST

$ man date

$ date --help
用法:date [选项]... [+格式]
 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
以给定<格式>字符串的形式显示当前时间,或者设置系统日期。

必选参数对长短选项同时适用。
  -d, --date=字符串          显示给定<字符串>描述的时间,而非“当前时间”
      --debug                对解析的日期添加注释,
                              对不规范的使用方式进行警告,并输出警告信息到
                              标准错误
  -f, --file=日期文件        类似 --date;使用给定<日期文件>,一次处理一行
  -I[FMT], --iso-8601[=FMT]  以 ISO 8601 格式输出日期/时间。
                               FMT='date' 时只输出日期(默认行为),
                               当其为 'hours'、'minutes'、'seconds' 或 'ns' 时
                               则按照所指示的精确度显示日期和时间。
                               示例:2006-08-14T02:34:56-06:00
  -R, --rfc-email            以 RFC 5322 格式输出日期和时间。
                               例如:Mon, 14 Aug 2006 02:34:56 -0600
      --rfc-3339=格式        以 RFC 3339 格式输出日期/时间。
                               <格式>字符串可以是'date'、'seconds' 或 'ns',
                               用于指定日期和时间显示的精确度。
                               例如:2006-08-14 02:34:56-06:00
  -r, --reference=文件       显示指定<文件>的最后修改时间
  -s, --set=字符串           按照给定<字符串>描述的时间来设置时间
  -u, --utc, --universal     按照协调世界时(UTC)显示或设置时间
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

给定的格式FORMAT 控制着输出,解释序列如下:

  %%	一个文字的 %
  %a	当前locale 的星期名缩写(例如: 日,代表星期日)
  %A	当前locale 的星期名全称 (如:星期日)
  %b	当前locale 的月名缩写 (如:一,代表一月)
  %B	当前locale 的月名全称 (如:一月)
  %c	当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
  %C	世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
  %d	按月计的日期(例如:01)
  %D	按月计的日期;等于%m/%d/%y
  %e	按月计的日期,添加空格,等于%_d
  %F   完整日期格式,等价于 %+4Y-%m-%d
  %g   ISO-8601 格式年份的最后两位(参见 %G)
  %G   ISO-8601 格式年份(参见 %V),一般只和 %V 结合使用
  %h	等于%b
  %H	小时(00-23)
  %I	小时(00-12)
  %j	按年计的日期(001-366)
  %k   小时,空格补充空白位( 0..23);与 %_H 相同
  %l   小时,空格补充空白位( 1..12);与 %_I 相同
  %m   月份(01..12)
  %M   分钟(00..59)
  %n   换行
  %N   纳秒(000000000..999999999)
  %p   当前地区时间设置中 AM 或 PM 的等效值(“上午”或“下午”),未知则为空
  %P   类似 %p,但使用小写
  %q   一年中的季度(1..4)
  %r   当前地区时间中十二小时制钟表时间(例如,下午 11时11分04秒)
  %R   24 小时制的时间和分钟;和 %H:%M 相同
  %s   1970-01-01 00:00:00 UTC 以来的秒数
  %S	秒(00-60)
  %t	输出制表符 Tab
  %T	时间,等于%H:%M:%S
  %u	星期,1 代表星期一
  %U	一年中的第几周,以周日为每星期第一天(00-53)
  %V	ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
  %w	一星期中的第几日(0-6),0 代表周一
  %W	一年中的第几周,以周一为每星期第一天(00-53)
  %x	当前locale 下的日期描述 (如:12/31/99)
  %X	当前locale 下的时间描述 (如:23:13:48)
  %y	年份最后两位数位 (00-99)
  %Y	年份
  %z +hhmm		数字时区(例如,-0400)
  %:z +hh:mm		数字时区(例如,-04:00)
  %::z +hh:mm:ss	数字时区(例如,-04:00:00)
  %:::z			数字时区带有必要的精度 (例如,-04,+05:30)
  %Z			按字母表排序的时区缩写 (例如,EDT)

默认情况下,日期的数字区域以0 填充。
以下可选标记可以跟在"%"后:

  -  (连字符)不填充该域
  _  (下划线)以空格填充
  0  (数字0)以 0 填充
  +  以零填充,并且在大于四个数位的未来年份之前放置 '+' 符号
  ^  如果可能,使用大写字母
  #  如果可能,使用相反的大小写

在任何标记之后还允许一个可选的域宽度指定,它是一个十进制数字。
作为一个可选的修饰声明,它可以是E,在可能的情况下使用本地环境关联的
表示方式;或者是O,在可能的情况下使用本地环境关联的数字符号。

示例:
将 epoch(1970-01-01 UTC)以来的秒数转换为日期
  $ date --date='@2147483647'

显示美国东海岸的当前时间(请使用 tzselect(1) 来查询 TZ 的具体数值)
  $ TZ='America/Los_Angeles' date

显示美国东海岸下一个星期五当地时间早上九点
  $ date --date='TZ="America/Los_Angeles" 09:00 next Fri'

GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/date>
或者在本地使用:info '(coreutils) date invocation'

https://www.freecodecamp.org/news/bash-scripting-tutorial-linux-shell-script-and-command-line-for-beginners/

https://stackoverflow.com/questions/1401482/yyyy-mm-dd-format-date-in-shell-script

https://stackoverflow.com/questions/6306289/linux-script-date-manipulations

errors

Python !== Shell ❌

$ ./gpio.py 3
  File "/home/pi/Desktop/./gpio.py", line 15
    datetime = $(date '+%Y-%m-%d %T')
               ^
SyntaxError: invalid syntax

image

Python get datetime

from datetime import datetime

# 获得当前时间
now = datetime.now()

# 转换为指定的格式
currentTime = now.strftime("%Y-%m-%d %H:%M:%S")

print('currentTime =', currentTime)
# currentTime = 2023-04-12 04:24:24
import datetime

# 获得当前时间
now = datetime.datetime.now()

# 转换为指定的格式
currentTime = now.strftime("%Y-%m-%d %H:%M:%S")

print('currentTime =', currentTime)
# currentTime = 2023-04-12 04:23:40

image

demos

  1. shell
# ✅ 👍 相对路径 env
#!/usr/bin/env bash

# 指定文件编码 UTF-8 ✅
# coding: utf8

DATETIME=$(date '+%Y-%m-%d %T');
echo "✅ DATE = ${DATETIME}"

datetime.sh

$ touch datetime.sh
$ vim datetime.sh
$ chmod +x datetime.sh
pi@raspberrypi:~/Desktop $ ./datetime.sh 
✅ 现在时间 DATETIME 2023-04-12 11:53:57

image

  1. Python
#!/usr/bin/env python3
# coding: utf8

import RPi.GPIO as GPIO
import time
import sys

arg1 = sys.argv[1]
print("arg1 =", arg1);
# 获取时间戳 ✅
# SH_DATE=$(TZ=':Asia/Shanghai' date '+%Y-%m-%d %T');
# datetime = $SH_DATE
print("⏰ current datetime =", datetime);
# $ pinout 命令查看,或 https://pinout.xyz/
# 指定 BCM 模式下的 GPIO 针脚编号是 12
# 对应的物理针脚编号是 32
PIN = 12
# BCM 模式
GPIO.setmode(GPIO.BCM)

# 指定 GPIO 针脚为一个电流输出针脚
GPIO.setup(PIN, GPIO.OUT)

# 输出低电平
GPIO.output(PIN, GPIO.LOW)

# index
i = 0
# max
# n = 7

# 类型转换,str => int
n = int(arg1)

print("n =", n)
print('开始闪烁⏳')

while (i < n):
    print("i =", i)
    # 高电平,LED 点亮
    GPIO.output(PIN, GPIO.HIGH)
    # 休眠 1 秒,防止 LED 长时间点亮烧坏了
    time.sleep(1.0)
    # 低电平,LED 熄灭
    GPIO.output(PIN, GPIO.LOW)
    # 休眠 1 秒
    time.sleep(1.0)
    i = i + 1

# 输出低电平,LED 关闭
# GPIO.output(PIN, GPIO.LOW)

# 清除,释放内存
GPIO.cleanup()

print('结束闪烁 👌🏻')

RPi

删除所有 log 文件

# gpio
$ ls -al
总用量 36
drwxr-xr-x  2 pi   pi   4096  4月 12 11:03 .
drwxr-xr-x 17 pi   pi   4096  4月 12 10:44 ..
-rw-r--r--  1 pi   pi     71  4月 12 11:03 gpio.log.txt
-rwxr-xr-x  1 pi   pi    971  4月 10 23:36 gpio.py
-rw-r--r--  1 root root   87  4月 12 11:03 gpio-sudo.log.txt
-rwxr-xr-x  1 pi   pi    987  4月 12 10:43 gpio-sudo.py
-rw-r--r--  1 pi   pi     89  4月 12 11:03 gpio-system.log.txt
-rwxr-xr-x  1 pi   pi    989  4月 12 10:44 gpio-system.py
-rwxr-xr-x  1 pi   pi    207  4月 10 15:08 ip.sh

# 删除所有 log 文件
$ rm -f *.log.txt


$ ls -al
总用量 24
drwxr-xr-x  2 pi pi 4096  4月 12 11:39 .
drwxr-xr-x 17 pi pi 4096  4月 12 11:38 ..
-rwxr-xr-x  1 pi pi 1108  4月 12 11:38 gpio.py
-rwxr-xr-x  1 pi pi  987  4月 12 10:43 gpio-sudo.py
-rwxr-xr-x  1 pi pi  989  4月 12 10:44 gpio-system.py
-rwxr-xr-x  1 pi pi  207  4月 12 11:37 ip.sh

(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!

chat robot / message robot

SH_DATE=$(TZ=':Asia/Shanghai' date '+%Y-%m-%d %T');
echo "✅ SH_DATE = ${SH_DATE}"

https://github.com/xgqfrms?tab=repositories&q=robot&type=&language=&sort=

https://github.com/xgqfrms/fs-robot-notice/blob/main/src/robot.sh#L9

https://github.com/xgqfrms/wx-robot-notice/blob/main/src/robot.sh#L9

阅读打卡 消息机器人🤖️

#!/bin/sh

set -eux

# 设置 env
LANGUAGE="zh-CN"
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4343.0 Safari/537.36"

SH_DATE=$(TZ=':Asia/Shanghai' date '+%Y-%m-%d %T');
echo "✅ SH_DATE = ${SH_DATE}"

# 打印参数
# echo $1
# echo $2

# echo "✅$1 = ${1}"
# echo "✅$2 = ${2}"

# github env {REPORT_DATE, WEBHOOK_KEY}
echo "✅REPORT_DATE = ${REPORT_DATE}"
echo "✅WEBHOOK_KEY = ${WEBHOOK_KEY}"

# 读书会机器人🤖️ features:
# 1. 大大简化进入打卡的流程,跳过 3s 首页的推荐;
# 2. 每天早晚两次打卡提醒(08:00 和 20:00) ⏰,降低忘记打卡的风险;

MARKDOWN='
{
    "msgtype": "markdown",
    "markdown": {
        "content": "⏰ '$SH_DATE'\n\n🎉<font color=\"warning\">读书会快捷链接</font>\n\n📘[<font color=\"info\">阅读打卡链接</font>](https://library.xgqfrms.xyz/#/club/share)\n\n👨🏻‍💻[<font color=\"info\">我的链接</font>](https://library.xgqfrms.xyz/#/my)\n\n💰[<font color=\"info\">积分链接</font>](https://library.xgqfrms.xyz/#/mall)\n\n<font color=\"warning\">读书会机器人🤖️ features:</font>\n\n<font color=\"comment\">1. 大大简化进入打卡的流程,跳过 3s 首页的推荐;</font>\n\n<font color=\"comment\">2. 每天早晚两次打卡提醒(08:00 和 20:00) ⏰,降低忘记打卡的风险;</font>\n\n",
        "mentioned_list":["凌晨"],
    }
}'

# MARKDOWN='
# {
#     "msgtype": "markdown",
#     "markdown": {
#         "content": "🎉<font color=\"info\">[阅读打卡链接](https://library.xgqfrms.xyz/#/club/share)</font>\n\n👨🏻‍💻<font color=\"info\">[我的链接](https://library.xgqfrms.xyz/#/my)</font>\n\n💰<font color=\"info\">[积分链接](https://library.xgqfrms.xyz/#/mall)</font>\n\n",
#         "mentioned_list":["凌晨","@all"],
#     }
# }'

# 不支持 ![]() 图片
# MARKDOWN='
# {
#     "msgtype": "markdown",
#     "markdown": {
#         "content": "🎉<font color=\"info\">[阅读打卡链接](https://library.xgqfrms.xyz/#/club/share)</font>\n🎉<font color=\"info\">[我的链接](https://library.xgqfrms.xyz/#/my)</font>\n![yoona](https://user-images.githubusercontent.com/7291672/143517029-7993a3a8-3983-405a-b146-50fcd47a0f25.png)"
#     }
# }'

# JSON='
#   {
#       "msgtype": "text",
#       "text": {
#           "content": "📘 阅读打卡了 ${SH_DATE}",
#       }
#   }';

# echo $JSON;

# 只有双引号中才可以包含变量,单引号不可以包含变量
curl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${WEBHOOK_KEY}" \
  -H 'Content-Type: application/json' \
  -H "Accept-Language: $LANGUAGE" \
  -H "User-Agent: $UA" \
  -d "$MARKDOWN"


# curl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${WEBHOOK_KEY}" \
#   -H 'Content-Type: application/json' \
#   -H "Accept-Language: $LANGUAGE" \
#   -H "User-Agent: $UA" \
#   -d "$JSON"


# curl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${WEBHOOK_KEY}" \
#   -H 'Content-Type: application/json' \
#   -H "Accept-Language: $LANGUAGE" \
#   -H "User-Agent: $UA" \
#   -d '
#   {
#       "msgtype": "text",
#       "text": {
#           "content": "📘 阅读打卡了 ${SH_DATE}",
#       }
#   }'

echo "finished 🎉"

macOS Intel CPUs

Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz

$ node ./os-module.mjs
os.arch() = x64
os.cpus().length = 12
os.cpus()[0] = {
  model: 'Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz',
  speed: 2200,
  times: { user: 3276490, nice: 0, sys: 2014940, idle: 30180650, irq: 0 }
}
os.hostname() = xgqfrms-mbp.local
os.platform() = darwin
os.userInfo() = {
  uid: 501,
  gid: 20,
  username: 'xgqfrms-mbp',
  homedir: '/Users/xgqfrms-mbp',
  shell: '/bin/zsh'
}
os.version() = Darwin Kernel Version 21.4.0: Mon Feb 21 20:34:37 PST 2022; root:xnu-8020.101.4~2/RELEASE_X86_64

https://www.cnblogs.com/xgqfrms/p/17400616.html

refs

https://www.cnblogs.com/xgqfrms/p/17306951.html#5167020

https://www.cnblogs.com/xgqfrms/p/15937724.html

https://www.cnblogs.com/xgqfrms/p/12818058.html



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


posted @ 2023-04-12 12:39  xgqfrms  阅读(22)  评论(1编辑  收藏  举报