%m%d%Y 格式的日期错误无效

%m%d%Y 格式的日期错误无效

我想将 %m%d%Y 格式的字符串转换为日期。

但是,出现无效日期错误,如下所示:

bash-4.1$ date -d '10042015' +"%m%d%Y"
date: invalid date `10042015'

如何修复它?

答案1

date +选项仅设置输出格式,而不是输入。您需要使用不同的工具或首先格式化字符串:

date --date="$(sed 's/^\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9][0-9][0-9]\)$/\3-\1-\2/' <<< '10042015')"

或者

date --date="$(sed 's/\(..\)\(..\)\(....\)/\3-\1-\2/' <<< '10042015')"

或者简单地

date --date="$(sed 's/\(.*\)\(....\)$/\2\1/' <<< '10042015')"

(谢谢@科斯塔斯)。尽管后两个较短,我仍然建议第一个,因为:

  1. 它更严格,可以避免在处理来自第三方工具或用户的字符串时出现奇怪的错误,更重要的是,
  2. 它更易于维护,因为代码正在做什么更明显(重新排列三个数字并在它们之间放置连字符,而不是将最后四个字符移到字符串的开头)。

相关内容