DateTime Parsing .Net 3.5

本文关键字:Net Parsing DateTime | 更新日期: 2023-09-27 17:58:17

我的DB2数据库中有一个字符串,它位于美国。我有一个列值设置为字符串"2011-12-31 00:00:00",表示2011年、12月和12月1日。

我在我的客户端程序中检索这个字符串,该程序正在英国运行,UI设置为本地区域性(默认)。我的客户项目也在美国和香港运行,文化设置为当地文化,即分别为美国和香港。

我使用以下代码将字符串解析为日期时间。我不太确定这是否会奏效,我也找不到任何好的链接来指引我的方向。你能告诉我这在不同的文化中是否有效吗,如果不是为什么的话?

string quarterStartDate = "2011-12-01 00:00:00";
DateTime quarterStart;
DateTime.TryParse(quarterStartDate, CultureInfo.InvariantCulture, DateTimeStyles.None, out quarterStart);
return quarterStart;

我有一个测试,它可以根据我的要求工作,但我也不太确定当UI在另一个国家运行时,它是否会工作。

  string quarterStarter = "2011-12-01 00:00:00";        
  DateTime quarterStart; 
  DateTime.TryParse(quarterStarter,CultureInfo.InvariantCulture,DateTimeStyles.None,out quarterStart);    
  Assert.IsTrue(quarterStart.Year == 2011);
  Assert.IsTrue(quarterStart.Month == 12);
  Assert.IsTrue(quarterStart.Day == 1);

DateTime Parsing .Net 3.5

我强烈建议您提前了解格式,使用TryParseExact而不是TryParse:

bool success = DateTime.TryParseExact(quarterStarter, "yyyy-MM-dd HH:mm:ss",
                                      CultureInfo.InvariantCulture,
                                      DateTimeStyles.None,
                                      out quarterStart);

请注意,应该检查TryParseExact的返回值,以检查它是否被正确解析——如果您对异常没有问题,只需使用ParseExact即可。

您现有的代码完全有可能正常工作——毕竟,您已经提供了不变的区域性——但指定格式可以更清楚地显示您真正期望的内容,也意味着您将检测是否提供了意外格式的值。

您可以使用ParseExact来提取日期,例如:

var s = "2011-12-01 00:00:00";
var dt = DateTime.ParseExact(s,"yyyy-MM-dd HH:mm:ss",CultureInfo.InvariantCulture);

您可以设置一个不随区域性而更改的特定格式。

DateTime dt;
DateTime.TryParseExact(dateTime, 
                       "yyyy-MM-dd hh:mm tt", 
                       CultureInfo.InvariantCulture, 
                       DateTimeStyles.None, 
                       out dt);