【问题标题】:convert date string to date time c#将日期字符串转换为日期时间c#
【发布时间】:2021-10-28 13:53:57
【问题描述】:

我很困惑将 23/09/21 或 09/23/21 转换为有效的日期时间

23/09/21 指开发环境09/23/21 指客户部署环境

string _tmpCreatedDate = ((SAPbouiCOM.EditText)b1MatrixUser.Columns.Item("Col_8").Cells.Item(i + 1).Specific).Value;

因此变成string _tmpCreatedDate = "23/09/21";

DateTime _swapCreatedDate = Convert.ToDateTime(_tmpCreatedDate);

以上代码将输出字符串未被识别为有效的日期时间。

试过_tmpCreatedDate = Convert.ChangeType(_tmpCreatedDate, typeof(DateTime)).ToString();

同样的转换问题,因为输入字符串是动态的 dd/MM/yy 或 月/日/年 如何正确处理?

【问题讨论】:

  • 你不能只改变这样的类型,你应该看看 [DateTime.Parse] 或其他变体(ParseExactTryParse 等)
  • 您希望“04/05/21”的结果是什么?
  • @JonSkeet 那个问题 dd/MM/yy 指的是开发环境,MM/dd/yy 指的是客户部署环境,这种情况如何解决?
  • 嗯,你知道你应该使用哪种文化吗?如果是这样,请使用DateTime.ParseExact 指定适当的文化。但如果你不“知道”你所处的环境,那就更成问题了。 (我认为如果可能的话,更好的解决方案是改变数据的存储方式,但我意识到在这个阶段这可能是不可行的。)

标签: c# datetime


【解决方案1】:

我认为你可以简单地使用DateTime.ParseExact

  DateTime dt = DateTime.ParseExact(_tmpCreatedDate , "MM/dd/yyyy",CultureInfo.InvariantCulture);

在此处阅读更多信息 CultureInfo.InvariantCulture PropertyDateTime.ParseExact

【讨论】:

  • DateTime dt = DateTime.ParseExact(_tmpCreatedDate , "MM/dd/yyyy",CultureInfo.InvariantCulture);由于试图转换 23/09/21,使得 String 未被识别为有效的 DateTime
  • 尝试将 MM/dd/yyyy 更改为 dd/MM/yyyy 并告诉我它是否有效
  • @Sanjeewa 尝试将 MM/dd/yyyy 更改为 dd/MM/yyyy 并告诉我它是否有效
  • 你可以在你的应用程序的config中指定dat格式或在代码中检测,如果它是开发模式,那么你可以在应用程序启动时将适当的格式保存在一些全局变量中。
  • @MichałTurczyn 是的,好点
【解决方案2】:

作为评论添加,但对于 OP 请求,我正在添加一个答案:

您可以在应用程序的配置中指定日期格式或在代码中检测,如果是开发模式,则在应用程序启动时,您可以将适当的格式保存在某个全局变量中。

如果您使用依赖注入,其中一个想法是定义一些日期提供程序服务,甚至您可以尝试指定自己的IFormatProvider 或类似的东西,然后在DateTime 的解析方法中使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2019-04-12
    • 2011-09-08
    相关资源
    最近更新 更多