c# - 从奇怪的格式解析 c# 中的 DateTime

标签 c# datetime parsing format culture

如果我有一个奇怪格式的日期时间字符串,例如 YYYY##MM##DD HH**M**SS,我如何基于它创建一个新的日期时间对象?我已经阅读了一些关于 datetimeformatinfoclass 的内容,但不确定如何让它工作..

最佳答案

对于您不信任的数据,您可以使用 DateTime.ParseExact 或 DateTime.TryParseExact。例如:

using System;

class Test
{
    static void Main()
    {
        string formatString = "yyyy'##'MM'##'dd' 'HH'*'mm'*'ss";
        string sampleData = "2010##02##10 07*22*15";
        Console.WriteLine(DateTime.ParseExact(sampleData,
                                              formatString,
                                              null));
    }
}

格式字符串中的引号并不是绝对必要的——这也可以:

string formatString = "yyyy##MM##dd HH*mm*ss";

但是,使用引号意味着您明确表示引号之间的字符按字面意思使用,而不是理解为模式字符 - 因此如果您将“#”更改为“/”,则使用引号的版本肯定会使用“/”,而没有的版本将使用特定于文化的值。

ParseExact 调用中的 null 表示“使用当前文化”——在这种情况下不太可能产生太大差异,但一个常用的替代方法是 CultureInfo.InvariantCulture.

不幸的是,没有办法让 BCL 解析格式字符串并保留信息;我自己的Noda Time项目纠正了这种情况,我希望它能使解析和格式化更快 - 但目前还远未准备好生产。

关于c# - 从奇怪的格式解析 c# 中的 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2235065/

相关文章:

C#如何将不规则的日期时间String转换成DateTime?

parsing - 配置文件格式

java - 从 C 文件中提取 int 数组

c# - 搜索等于宽度 LINQ

c# - 只读 ("const"-like) C# 的函数参数

c# - 使用 Asp.net 上传和下载文件

java - Java String split() 的意外行为

c# - System32 或 SysWOW64 的 Windows 7 环境变量

c# - 来自时区分钟偏移量的 TimeZoneInfo

c - 获取日期和时间(以毫秒为单位)