0

日付/時刻の変換を行うスクリプトが必要です。入力として特定の時間を取得する必要があります。次に、時:分形式と経過ミリ秒数の両方で、一連のオフセットを生成する必要があります。

たとえば、03:00 の場合、04:02:07 (3727000ms*) 05:04:14 (7454000ms)、06:06:21 などを返す必要があります。

これをbashスクリプトとして行うにはどうすればよいですか? 理想的には、Mac OS X と Linux (Ubuntu または Debian) の両方で動作します。

  • (1時間 * 60分/時間 * 60秒/分 * 1000ミリ秒/秒)+(2分*60秒/分 * 1000ミリ秒/秒)+(7秒*1000ミリ秒/秒) = (60*60*1000)+(2* 60*1000)+(7*1000) = 3727000
4

1 に答える 1

2
time2ms () {
    local time=$1 hour minute second
    hour=${time%%:*}
    minute=${time#$hour:}
    minute=${minute%:*}
    second=${time#$hour:$minute}
    second=${second/:}
    echo "$(( ( (10#${hour} * 60 * 60) + (10#${minute} * 60) + 10#${second} ) * 1000 ))"
}

ms2time () {
    local ms=$1 hour minute second
    ((second = ms / 1000 % 60))
    ((minute = ms / 1000 / 60 % 60))
    ((hour = ms / 1000 / 60 / 60))
    printf '%02d:%02d:%02d\n' "$hour" "${minute}" "${second}"
}

show_offsets () {
    local time=$1 interval=$2 time_ms interval_ms new_time
    time_ms=$(time2ms "$time")
    interval_ms=$(time2ms "$interval")
    new_time=$(ms2time $((time_ms + interval_ms)) )
    echo "$new_time (${interval_ms}ms)"
}

デモ:

$ show_offsets 03:00 1:02:07
04:02:07 (3727000ms)
$ show_offsets 03:00 2:04:14
05:04:14 (7454000ms)
$ show_offsets 03:00 3:06:21
06:06:21 (11181000ms)
于 2012-06-05T02:14:24.820 に答える