代码之家  ›  专栏  ›  技术社区  ›  Seb

C#分析区域日期时间字符串

  •  3
  • Seb  · 技术社区  · 14 年前

    我正在尝试为一个项目制作一个小应用程序,来自世界各地的客户可以在其中使用。我遇到的问题是,后端是使用生成并上载到共享网络的XML文件来设置的,在这些XML文件中,我存储了一个日期时间变量,该变量表示特定任务的开始和完成时间。程序在特定的加载间隔内崩溃,出现格式异常,经过一些研究,我发现我需要设置一个区域性的日期-时间解析器。

    我的问题是如何转换XML文件中的时间,无论是使用US、AU还是UK区域设置,并使用客户端的本地设置。这是使用VS C#2005和.NET 3.5框架完成的。

    提前谢谢你的帮助。

    2 回复  |  直到 14 年前
        1
  •  8
  •   Jon Skeet    14 年前

    后端 应该 计算机 ,不是为了 人类 . 除非你正在格式化 消费,你不应该使用当地的变化。

    因此,要么在任何地方都使用特定格式,在格式化时指定CultureInfo.InvariantCulture,要么使用 dt.ToString("o") 或另一个区域性不变格式字符串。

    如果你只是在谈论一个时间点(即当地时间不重要,只是全球时间),你应该 DateTime.UtcNow 而不是 DateTime.Now .

    一旦你得到了 一代 消费 应该很直截了当。

    但是,如果您没有足够的时间修改生成代码,那么 可以 必须通过右转 CultureInfo DateTime.TryParseExact . 但是,这意味着您需要知道用于创建文件的区域性。如果文件是以对区域性敏感的方式生成的,而您不知道它们使用的是哪种区域性,那么基本上就是塞满了。例如,2010年5月3日意味着2010年3月5日或2010年5月3日。如果没有更多的信息,你就无法决定使用哪一种。

        2
  •  1
  •   Community Tales Farias    7 年前

    区域设置意味着格式。这是 你最关心的。格式很简单(使用 DateTime.Parse .ParseExact 时区应该是你最关心的问题

    请参考 How to convert string to local Date Time?