当前位置: 技术问答>linux和unix
求教date问题,谢谢
来源: 互联网 发布时间:2016-03-08
本文导语: 准备用shell写一个实现时间格式转换的函数, 就是类似与date -d的功能 虽然date -d 可以实现大部分,但这对shell的版本有依赖 基本要求是: 2008/2/25 -> 2008-02-25 00:00:00 2008/2/25 22:33:44 -> 2008-02-25 22:33:44 2008/2/25 22:3:4...
准备用shell写一个实现时间格式转换的函数,
就是类似与date -d的功能
虽然date -d 可以实现大部分,但这对shell的版本有依赖
基本要求是:
2008/2/25 -> 2008-02-25 00:00:00
2008/2/25 22:33:44 -> 2008-02-25 22:33:44
2008/2/25 22:3:4 -> 2008-02-25 22:03:04
20080225 -> 2008-02-25 00:00:00
20080225223344 -> 2008-02-25 22:33:44
这种格式的转换需要考虑的事情太多了
哪位高人给点思路?谢谢
就是类似与date -d的功能
虽然date -d 可以实现大部分,但这对shell的版本有依赖
基本要求是:
2008/2/25 -> 2008-02-25 00:00:00
2008/2/25 22:33:44 -> 2008-02-25 22:33:44
2008/2/25 22:3:4 -> 2008-02-25 22:03:04
20080225 -> 2008-02-25 00:00:00
20080225223344 -> 2008-02-25 22:33:44
这种格式的转换需要考虑的事情太多了
哪位高人给点思路?谢谢
|
不知道这个符不符和楼主的要求?
简单说一下思路:
1、把非数字的字符转成空格,然后把单个的数字进行前加0处理
2、把空格再去除之后,长度为8和14的两种格式自然是合法的依据相关的规则进行输出,否则输出错误信息
执行结果 :
matrix@MMAC /c
$ sh test.sh
2008-02-02 00:00:00
2008-02-25 00:00:00
2008-02-25 22:33:44
2008-02-25 22:03:04
2008-02-25 00:00:00
2008-02-25 22:33:44
matrix@MMAC /c
$
:)Shell是很强大滴……
简单说一下思路:
1、把非数字的字符转成空格,然后把单个的数字进行前加0处理
2、把空格再去除之后,长度为8和14的两种格式自然是合法的依据相关的规则进行输出,否则输出错误信息
#!/bin/sh
format_date () {
# check argument
[ -z $1 ] && echo "usage: format_date " && return
line="$@"
# format line
line=$(echo $line | sed 's/[^0-9]+/ /g')
line=$(echo $line | sed 's/ ([0-9]) / 01 /g')
line=$(echo $line | sed 's/^([0-9]) /01 /g')
line=$(echo $line | sed 's/ ([0-9])$/ 01/g')
line=$(echo $line | sed 's/ +//g')
length=$(echo -n $line | wc -c)
if [ $length -eq 8 ] ; then
# format YYYY-MM-DD 00:00:00
year=$(echo $line | cut -c 1-4)
month=$(echo $line | cut -c 5-6)
day=$(echo $line | cut -c 7-8)
echo "$year-$month-$day 00:00:00"
elif [ $length -eq 14 ] ; then
# format YYYY-MM-DD HH:MM:SS
year=$(echo $line | cut -c 1-4)
month=$(echo $line | cut -c 5-6)
day=$(echo $line | cut -c 7-8)
hour=$(echo $line | cut -c 9-10)
min=$(echo $line | cut -c 11-12)
second=$(echo $line | cut -c 13-14)
echo "$year-$month-$day $hour:$min:$second"
else
echo "Invalid date string: $@"
fi
}
format_date 2008/2/25
format_date 2008/2/25 22:33:44
format_date 2008/2/25 22:3:4
format_date 20080225
format_date 20080225223344
执行结果 :
matrix@MMAC /c
$ sh test.sh
2008-02-02 00:00:00
2008-02-25 00:00:00
2008-02-25 22:33:44
2008-02-25 22:03:04
2008-02-25 00:00:00
2008-02-25 22:33:44
matrix@MMAC /c
$
:)Shell是很强大滴……
|
对日期的处理向来是一个大麻烦,建议你用c完成一个专门的处理程序,
要加上 日期格式的参数,shell搞这个,只能把自己搞得头大
要加上 日期格式的参数,shell搞这个,只能把自己搞得头大
|
还有,够用就行,过度设计是不好的
|
收藏了~
|
11楼思路还是蛮不错的,不过shell的效率有蛮大问题
|
这个估计很麻烦,只有尽量把可能的情况都设想到。
|
哈哈,直接用asctime或ctime,就可以了。不要用shell
|
直接用ctime(xx)或asctime(xx)函数呀,用shell太麻烦了
|
直接用ctime(xx)或asctime(xx)函数呀,用shell太麻烦了
|
直接用ctime(xx)或asctime(xx)函数呀,用shell太麻烦了
|
用asctime(xx)或ctime(xx)函数就行,不要用shell太麻烦了
|
用asctime(xx)或ctime(xx)函数就行,不要用shell太麻烦了