HOUR公式返回错误结果,如何解析“31 Jan 10:01:23”格式的DateTime?
解析自定义格式DateTime值(如"31 Jan 10:01:23")的解决方案
Excel中HOUR公式的处理方案
Excel的HOUR函数仅支持识别系统区域默认的标准日期时间格式,对于"31 Jan 10:01:23"这类自定义格式的字符串无法直接解析,可通过以下两种方式解决:
方法1:格式转换后提取小时
使用TEXT函数将字符串转换为Excel可识别的日期格式,再转换为日期序列值后调用HOUR:
=HOUR(--TEXT("31 Jan 10:01:23","dd mmm hh:mm:ss"))
- 说明:
TEXT按指定格式匹配字符串,--将文本转换为Excel日期序列值,HOUR从转换后的日期时间中提取小时。需确保Excel区域设置支持英文月份缩写(如设置为English (United States))。
方法2:手动拆分构建日期时间
若系统区域不支持英文月份,可手动映射月份缩写到数字,拆分字符串后组合日期时间:
=HOUR(DATE(2024,MATCH(MID("31 Jan 10:01:23",4,3),{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"},0),LEFT("31 Jan 10:01:23",2))+TIMEVALUE(MID("31 Jan 10:01:23",8,8)))
- 说明:通过
LEFT提取日期、MID提取月份缩写,用MATCH匹配对应月份数字;MID提取时分秒后用TIMEVALUE转为时间,最后组合成完整日期时间后提取小时。公式中的2024可根据实际年份替换。
.NET中DateTime解析的处理方案
DateTime.TryParse/DateTime.Parse依赖系统区域设置,无法直接解析该自定义格式,需使用TryParseExact或ParseExact指定匹配格式:
C#代码示例
using System.Globalization; string dateInput = "31 Jan 10:01:23"; string formatPattern = "dd MMM HH:mm:ss"; if (DateTime.TryParseExact(dateInput, formatPattern, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTimeResult)) { int hourValue = dateTimeResult.Hour; // 得到小时值10 // 后续业务处理 } else { // 解析失败的异常处理 }
- 说明:
formatPattern中的dd对应两位日期,MMM对应英文月份缩写,HH对应24小时制小时,mm对应分钟,ss对应秒,完全匹配输入格式。CultureInfo.InvariantCulture确保解析不受系统区域影响,稳定识别英文月份缩写。- 若输入为12小时制(带AM/PM),可将
HH改为hh,并在格式中添加tt(如"dd MMM hh:mm:ss tt")。
内容的提问来源于stack exchange,提问作者Elakkiya Lucky
相关产品推荐
相关产品推荐

