ParseExact反转我的日期和月份

时间:2015-06-15 07:28:28

标签: c# datetime

我的代码将异常作为无效的日期时间抛出。我将其发布到我的服务器后发生错误。在我的开发PC上找工作

string str = "27-07-2015 6:15 pm";
DateTime dt = Convert.ToDateTime(DateTime.ParseExact(str, "dd-MM-yyyy h:mm tt", null).ToString("dd-MM-yyyy hh:mm tt"));

月份为“27”,白天为“7”。

我做了什么来解决问题:

  • 我已经将该服务器上的日期时间格式更新为dd-MM-yyyy
  • 我仔细检查了日期时间格式的大写和小写字母。
  • 将'null'更改为'CultureInfo.InvariantCulture'
  • 将'pm'更改为'PM','tt'更改为'TT'
  • 阅读我在google和stackoverflow上找到的所有资源,没有任何帮助。
我在这里错过了什么吗?我知道我做了...... :(

2 个答案:

答案 0 :(得分:6)

正如@Rawling正确指出的那样,你要解析日期时间两次:首先,使用自定义格式,然后使用系统的默认格式。

这很愚蠢 - 您已经拥有DateTime方法中的ParseExact

string str = "27-07-2015 6:15 pm";
var dt = DateTime.ParseExact(str, "dd-MM-yyyy h:mm tt", null);

就是这样,你已经完成了。无需再次转换为字符串,并再次解析(更糟糕的是,使用相同的自定义格式来执行ToString,因此后续的Convert.ToDateTime 绑定到在任何不是默认日期时间格式的地方失败。

答案 1 :(得分:1)

有几种可能性;

让我们先分析您的DateTime.ParseExact(str, "dd-MM-yyyy h:mm tt", null)部分。这将成功解析您的27-07-2015 6:15 pm字符串如果;

如果两者都是okey,则表示您已成功解析DateTime

之后,您将使用dd-MM-yyyy hh:mm tt格式生成文本表示。这仍然取决于您的CurrentCulture,您的结果可能PM。对于这两种情况,都无法保证使用Convert.ToDateTime方法解析您的字符串,因为只有 >它是CurrentCulture string str = "27-07-2015 6:15 pm"; DateTime dt = DateTime.ParseExact(str, "dd-MM-yyyy h:mm tt", CultureInfo.InvariantCulture); 的{​​{3}}才会解析您的字符串

另一方面,你所做的事对我没有意义。首先解析字符串,然后生成字符串表示,然后再尝试解析此字符串 。没有意义,对吧?

我强烈怀疑你只需要;

.nav-tabs li {display: none;}
.nav-tabs li.active {display: list-item} /* or block, if LIs are floated or you want them block */