【问题标题】:Conditional DateTime.ParseExact format条件 DateTime.ParseExact 格式
【发布时间】:2015-07-10 19:07:48
【问题描述】:

我正在从银行存款报告中解析日期,格式如下:

Jul  9 2015
Jun 20 2015

基本上是MMM dd yyyy,只是个位数的日期不包含前导零。有没有简单的方法在DateTime.ParseExact() 中进行条件格式化?还是我必须预处理日期字符串并添加前导零或删除额外的空格?以下是适用于个位数日期的方法:

Dim dtDepositDate As DateTime
dtDepositDate = DateTime.ParseExact(strDate, "MMM  d yyyy", CultureInfo.InvariantCulture)

显然,MMM dd yyyy 适用于两位数日期,但不适用于中间有额外空格的一位数日期。

【问题讨论】:

    标签: vb.net datetime


    【解决方案1】:

    单位/两位数日部分

    使用单个d,这对单位数和双位数的日值都有好处。

    如果DateTime 转换为string,则具有单个d 会影响值。就解析而言,它适用于单位数和双位数的日期值,例如 0111120 等。MH 也是如此。 mMonthHour Minutes 等的说明符。

    多个空格

    对于多个空格,在解析中使用DateTimeStyles.AllowWhiteSpaces

    DateTime dt = DateTime.ParseExact("Jul  9 2015", "MMM d yyyy",
                                    CultureInfo.InvariantCulture,
                                    DateTimeStyles.AllowWhiteSpaces);
    

    或两位数的天部分:

    DateTime dt = DateTime.ParseExact("Jun 20 2015", "MMM d yyyy",
                                    CultureInfo.InvariantCulture,
                                    DateTimeStyles.AllowWhiteSpaces);
    

    【讨论】:

    • 请注意,两位数的日期在月份名称之间没有多余的空格。这就是两难境地……MMM dd yyyy 适用于一种情况,MMM d yyyy 适用于另一种情况,但两者都不适用。
    • 我想我可能会做一个strDate.Replace(" ", " ") 来删除前导空格(如果适用)。那应该可以解决我的问题,我只是想知道是否有某种方法可以使用字符串格式本身来处理这个问题。
    • @dubstylee,不只是修改了我的答案。
    • @dubstylee,忽略多余的空格使用DateTimeStyles.AllowWhiteSpaces
    • 这正是我想要的 - DateTimeStyles.AllowWhiteSpace。我认为可能有一种方法可以处理这两种情况。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多