我想将 %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')"
(谢谢@科斯塔斯)。尽管后两个较短,我仍然建议第一个,因为:
- 它更严格,可以避免在处理来自第三方工具或用户的字符串时出现奇怪的错误,更重要的是,
- 它更易于维护,因为代码正在做什么更明显(重新排列三个数字并在它们之间放置连字符,而不是将最后四个字符移到字符串的开头)。