在C#中如何将24小时制时间(如11:10:00.000Z)转换为12小时制?
解决24小时制UTC时间转12小时制并忽略分钟的问题
你的核心需求是把带毫秒的UTC时间字符串(如11:10:00.000Z)转换为只保留小时、分钟归零的12小时制格式(如11:00 am)。当前代码的问题是仅做了格式转换,但没有对时间的分钟、秒、毫秒进行截断处理,所以会保留原时间的10分钟。
修正后的代码方案
// 解析UTC时间字符串 var parsedTime = DateTimeOffset.ParseExact( e.From_Time, "HH:mm:ss fffZ", CultureInfo.InvariantCulture ).DateTime; // 将分钟、秒、毫秒归零,仅保留日期和小时部分 var timeWithZeroMinutes = parsedTime.AddMinutes(-parsedTime.Minute) .AddSeconds(-parsedTime.Second) .AddMilliseconds(-parsedTime.Millisecond); // 格式化为12小时制,指定区域避免差异 time = timeWithZeroMinutes.ToString("hh:mm tt", CultureInfo.InvariantCulture);
关键说明
- 解析环节的写法是正确的,
"HH:mm:ss fffZ"完全匹配输入的时间格式 - 必须手动截断分钟、秒、毫秒:解析后的时间会保留原字符串的所有时间分量,直接格式化只会改变显示形式,不会修改时间值
- 指定
CultureInfo.InvariantCulture可以确保tt部分输出am/pm而非其他语言的上午/下午,符合需求
内容的提问来源于stack exchange,提问作者John Hopkins
相关产品推荐
相关产品推荐

