Seagate个硬盘驱动器显示代码而不是生产日期。代码描述为here,并且可以使用在线解码器here。
简而言之,它是YYWWD
或YYWD
形式的4位或5位数字,其中:
YY
是年份,00是1999年W
或WW
是从1开始的周数D
是从1开始的一周实施例
如何在bash
脚本中解码?
答案 0 :(得分:3)
这就是我所做的,它应该有效:
#!/bin/bash
DATE=$1
REGEX="^(..)(..?)(.)$"
[[ $DATE =~ $REGEX ]]
YEAR=$(( ${BASH_REMATCH[1]} + 1999 ))
WEEK=$(( ${BASH_REMATCH[2]} - 1))
DAYOFWEEK=$(( ${BASH_REMATCH[3]} - 1))
OFFSET=$(( 6 - $(date -d "$YEAR-07-01" +%u) ))
DATEOFFIRSTSATURDAY=$(date -d "$YEAR-7-01 $OFFSET days" +%d)
FINALDATE=`date -d "$YEAR-07-$DATEOFFIRSTSATURDAY $WEEK weeks $DAYOFWEEK days"`
echo $FINALDATE
它适用于上面给出的两个日期...... 如果要自定义日期输出,请在FINALDATe分配的末尾添加格式字符串。
答案 1 :(得分:1)
这是一个简短的脚本,需要两个参数:$1
是要转换的代码,$2
是可选格式(请参阅man date
),否则默认(请参阅代码)。
它使用了六月的最后一个星期六,而不是七月份的第一个星期六,因为我发现找到它更容易,它允许我只添加相关的周数和天数。
#!/bin/bash
date_format=${2:-%A %B %-d %Y}
code=$1
[[ ${#code} =~ ^[4-5]$ ]] || { echo "bad code"; exit 1; }
let year=1999+${code:0:2}
[[ ${#code} == 4 ]] && week=${code:2:1} || week=${code:2:2}
day=${code: -1}
june_last_saturday=$(cal 06 ${year} | awk '{ $6 && X=$6 } END { print X }')
date -d "${year}-06-${june_last_saturday} + ${week} weeks + $((${day}-1)) days" "+${date_format}"
示例:
$ seadate 06212
Sunday November 20 2005
$ seadate 0051
Saturday July 31 1999
答案 2 :(得分:-1)
我创建了一个希捷日期代码计算器,它实际上具有非常好的准确性。我在这个论坛上发布了它,供所有人使用:https://www.data-medics.com/forum/seagate-date-code-conversion-translation-tool-t1035.html#p3261
它比在线的其他人更准确,这通常指向完全错误的一年。我知道这不是一个bash脚本,但仍会为正在搜索如何执行此操作的其他人完成工作。
享受!