使用DateTime获取24小时制小时遇System.FormatException错误
解决DateTime获取24小时制小时数的FormatException问题
直接通过DateTime.Now.Hour属性获取24小时制的小时数即可,无需将日期时间对象转为字符串再解析,这能彻底避免格式转换引发的异常。
修改后的完整代码
private void Window1_Loaded(object sender, RoutedEventArgs e) { int time = DateTime.Now.Hour; string username = Environment.UserName + "!"; if (time > 5 && time < 12) { var greeting = "Good morning, " + username; WelcomeLabel_Label.Content = greeting; MessageBox.Show(greeting); } else if (time > 11 && time < 18) { var greeting = "Good afternoon, " + username; WelcomeLabel_Label.Content = greeting; MessageBox.Show(greeting); } // 补充夜间场景处理(可选) else { var greeting = "Good evening, " + username; WelcomeLabel_Label.Content = greeting; MessageBox.Show(greeting); } }
原代码出错原因
你原本使用ToString("H")的方式抛出FormatException,通常是因为当前线程的文化设置不支持单字母的格式符"H"。不同文化区域对日期格式符的解析规则存在差异,字符串转换容易触发这类兼容性问题。而直接访问Hour属性是获取小时数的原生方式,返回值本身就是整数类型,既高效又不会出现格式异常。
内容的提问来源于stack exchange,提问作者serix
相关产品推荐
相关产品推荐

