【问题标题】:Convert DateTime String to Integer将日期时间字符串转换为整数
【发布时间】:2017-02-15 08:35:05
【问题描述】:

我在 xml 文件中有这个 2017-02-13T00:00:00+08:00 日期时间作为字符串。我想将其转换为 yyyyMMdd 作为整数。

这是我尝试过的:

Integer.Parse(myRow("ENT_DATE").ToString("yyyy") & myRow("ENT_DT").ToString("MM") & myRow("ENT_DT").ToString("dd"))

但它返回一个错误。 Conversion from string "yyyy" to type 'Integer' is not valid.

myRow("ENT_DATE")参考2017-02-13T00:00:00+08:00

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    问题是DataRowItem 属性返回一个Object 引用,因此您没有调用正确的ToString 方法。该代码应该是:

    CInt(CDate(myRow("ENT_DATE")).ToString("yyyyMMdd"))
    

    首先将字段值转换为 Date 类型,然后调用正确的 Date.ToString 方法。

    【讨论】:

    • 这给了我20170212 而不是20170213,可能是因为 CDate 考虑了时区 (+8) 而我在不同的时区 (+1)。对 OP 来说可能不是问题,但仍然需要考虑。
    • @PeterB 是日期会根据时区改变..??
    • CDate 将解释具有时区偏移 (+8) 的字符串。然后它会生成一个DateTime 值来匹配应用程序运行所在的当前时区。如果hour (HH) in the source string timezone in the source string - timezone of your system) 和夏令时校正(如果需要),这将导致 Day 部分减少 1 - 我当然希望我正确地制定了它。如果您想要一些简单且可预测的东西,请参阅my answer
    【解决方案2】:

    使用.ToString("yyyy") 仅适用于 DateTime 值,而不适用于字符串。

    最简单的方法可能是使用 Left() 和 Replace() 获取您需要的数字,然后将它们转换为 Integer 值,如下所示:

    CInt(Left(myRow("ENT_DATE"), 10).Replace("-", ""))
    

    这将为给定的输入生成20170213,无论应用程序设置了哪个时区。

    【讨论】:

    • 嗯...我假设 DataTable 中的值实际上是从 XML 反序列化的 DateTime。如果是这种情况,那么您的解决方案将不起作用,但也许我错了,它实际上是String。我猜 OP 必须有 Option Strict Off 所以,如果它是 DateTime,那么那个后期绑定的调用可能应该首先工作。
    猜你喜欢
    • 2022-08-18
    • 2015-09-17
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多