You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CSV列中的12小时制(AM/PM)时间转换为24小时制?

解决方案:将12小时制CSV时间转换为24小时制

针对你的1900行CSV时间转换需求,这里提供三种实用方案,涵盖你熟悉的Bash、易上手的Python和高效的Awk工具:

1. Bash 实现方案

虽然你觉得Bash处理起来麻烦,但这个脚本逻辑清晰,能处理12pm/12am的边界情况,直接可用:

#!/bin/bash

# 读取输入CSV,处理后写入输出文件
while IFS=, read -r date time ampm; do
    # 表头直接输出
    if [[ "$date" == "date" ]]; then
        echo "$date,$time,$ampm"
        continue
    fi

    # 拆分时间的小时、分、秒
    IFS=: read -r hour min sec <<< "$time"

    # 处理pm时段:12pm保持12,其他小时加12
    if [[ "$ampm" == "pm" ]]; then
        [[ "$hour" -ne 12 ]] && hour=$((hour + 12))
    else
        # 处理am时段:12am转为0
        [[ "$hour" -eq 12 ]] && hour=0
    fi

    # 格式化小时为两位数字(可选,若不需要可直接用$hour)
    formatted_hour=$(printf "%02d" "$hour")
    echo "$date,$formatted_hour:$min:$sec,$ampm"
done < input.csv > output.csv

使用方法:将脚本保存为convert_time.sh,把你的CSV命名为input.csv放在同一目录,执行bash convert_time.sh,结果会生成在output.csv里。

2. Python 极简实现方案

即使你不熟悉Python,这个脚本注释清晰,复制就能用:

import csv

# 打开输入和输出文件
with open('input.csv', 'r') as infile, open('output.csv', 'w', newline='') as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)

    # 写入表头
    writer.writerow(next(reader))

    for row in reader:
        date, time_str, ampm = row
        # 拆分时间各部分
        hour, minute, second = time_str.split(':')
        hour = int(hour)

        # 转换小时
        if ampm == 'pm':
            hour = hour + 12 if hour != 12 else hour
        else:
            hour = 0 if hour == 12 else hour

        # 生成新时间并写入行
        new_time = f"{hour:02d}:{minute}:{second}"
        writer.writerow([date, new_time, ampm])

使用方法:保存为convert_time.py,和input.csv放一起,执行python convert_time.py即可得到output.csv。

3. Awk 命令行快速方案

Awk处理文本效率极高,一行命令就能完成转换,适合大文件:

awk -F, '
    BEGIN {OFS=","}
    NR==1 {print; next}
    {
        split($2, time_parts, ":")
        hour = time_parts[1]
        if ($3 == "pm") {
            hour = (hour != 12) ? hour + 12 : hour
        } else {
            hour = (hour == 12) ? 0 : hour
        }
        printf "%s,%02d:%s:%s,%s\n", $1, hour, time_parts[2], time_parts[3], $3
    }
' input.csv > output.csv

使用方法:直接在终端运行这条命令,替换input.csv为你的文件名,结果会输出到output.csv。

内容的提问来源于stack exchange,提问作者parsecpython

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:48:30