如何将12小时制字符串转换为24小时制TimeOfDay/DateTime格式?
刚好之前做过类似的时间格式转换需求,其实不用自己手动判断AM/PM写逻辑,直接用语言自带的日期时间处理工具就能完美解决,给你两种常用语言的实现方案:
C# 实现方案
1. 将"6:45AM"转换为TimeOfDay/DateTime
用DateTime.ParseExact方法指定对应格式解析,就能直接得到DateTime对象,再提取TimeOfDay即可:
using System; using System.Globalization; class TimeConverter { static void Main() { // 处理AM时间 string amTimeStr = "6:45AM"; // 格式"h:mmtt":h是12小时制小时,mm是分钟,tt是AM/PM标识 DateTime amDateTime = DateTime.ParseExact(amTimeStr, "h:mmtt", CultureInfo.InvariantCulture); TimeSpan amTimeOfDay = amDateTime.TimeOfDay; // 这就是你需要的TimeOfDay格式 Console.WriteLine(amTimeOfDay); // 输出 06:45:00 } }
2. 将"6:45PM"转换为"18:45:00"
解析后用ToString指定24小时制格式"HH:mm:ss"(大写H代表24小时制)即可:
// 处理PM时间 string pmTimeStr = "6:45PM"; DateTime pmDateTime = DateTime.ParseExact(pmTimeStr, "h:mmtt", CultureInfo.InvariantCulture); string pm24HourStr = pmDateTime.ToString("HH:mm:ss", CultureInfo.InvariantCulture); Console.WriteLine(pm24HourStr); // 输出 18:45:00
Python 实现方案
1. 将"6:45AM"转换为时间对象(对应TimeOfDay)
用datetime模块的strptime方法解析,提取time()属性就是类似TimeOfDay的对象:
from datetime import datetime # 处理AM时间 am_time_str = "6:45AM" # 格式"%I:%M%p":%I是12小时制小时,%M是分钟,%p是AM/PM标识 am_datetime = datetime.strptime(am_time_str, "%I:%M%p") am_time_of_day = am_datetime.time() print(am_time_of_day) # 输出 06:45:00
2. 将"6:45PM"转换为"18:45:00"
用strftime方法指定"%H:%M:%S"格式(大写H代表24小时制):
# 处理PM时间 pm_time_str = "6:45PM" pm_datetime = datetime.strptime(pm_time_str, "%I:%M%p") pm_24hour_str = pm_datetime.strftime("%H:%M:%S") print(pm_24hour_str) # 输出 18:45:00
小提示
- 注意格式字符串的大小写:不管是C#还是Python,12小时制和24小时制的格式符大小写是有区别的,别搞混了。
- 如果要做健壮性处理,C#可以用
DateTime.TryParseExact避免格式错误崩溃;Python可以加try-except块捕获解析异常。
内容的提问来源于stack exchange,提问作者Sanket
相关产品推荐
相关产品推荐

