perl - 快速到达 YYYY-mm-dd HH :MM:SS in Perl

在编写 Perl 脚本时,我经常发现需要将当前时间表示为格式为 YYYY-mm-dd HH:MM:SS 的字符串(比如 2009-11-29 14:28:29).

在这样做的过程中,我发现自己走的是一条相当繁琐的道路:

  • man perlfunc
  • /localtime 搜索本地时间 - 重复五次 (/ + \n) 以到达手册页的相关部分
  • 从手册页复制字符串 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);到我的脚本。
  • 试试 my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year, $mon, $mday, $hour, $min, $sec );
  • 记住问题 #1:必须在 $year 上加上 1900 才能得到当前年份。
  • 试试 my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon, $mday, $hour, $min, $sec);
  • 记住问题 #2:必须在 $mon 上加 1 才能获得当前月份。
  • 试试 my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $mday, $hour, $ min, $sec);
  • 看起来还可以。完成!

虽然上述过程有效,但远非最佳。我确信有更聪明的方法,所以我的问题很简单:

在 Perl 中获取当前日期/时间的 YYYY-mm-dd HH:MM:SS 的最简单方法是什么?

“简单”包含“易于编写”和“易于内存”。

最佳答案

在标准POSIX中使用strftime模块。 strftime 的参数在 Perl 的绑定(bind)中,旨在与 localtime 的返回值保持一致和 gmtime .比较

strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)

my          ($sec,$min,$hour,$mday,$mon,$year,$wday,     $yday,     $isdst) = gmtime(time);

命令行使用示例

$ perl -MPOSIX -le 'print strftime "%F %T", localtime $^T'

或来自源文件,如

use POSIX;

print strftime "%F %T", localtime time;

某些系统不支持 %F%T 简写,因此您必须明确使用

print strftime "%Y-%m-%d %H:%M:%S", localtime time;

print strftime "%Y-%m-%d %H:%M:%S", gmtime time;

请注意 time返回调用时的当前时间,而 $^T固定为程序启动的时间。与 gmtime ,返回值是格林威治标准时间的当前时间。使用 localtime 检索您本地时区的时间.

https://stackoverflow.com/questions/1814196/

相关文章:

c# - 如何将 double 格式设置为四舍五入到最接近的美元的货币?

javascript - 使用 Javascript 将 24 小时时间转换为 12 小时时间 w/

c# - 使用任意字符串向左或向右填充 string.format(不是 padleft 或 pad

python - 如何自动格式化一些 Python 代码以正确格式化?

c++ - 相当于 %02d 与 std::stringstream?

sql - 有哪些免费的 SQL 格式化工具?

python - Python中用户友好的时间格式?

android - 在android中的编辑文本中格式化信用卡

c# - 您何时使用 StringBuilder.AppendLine/string.Format

java - 转换给定时区的日期/时间 - java