【问题标题】:Convert string format to date format将字符串格式转换为日期格式
【发布时间】:2019-12-24 23:29:32
【问题描述】:

如何转换这种字符串格式

03.07.2019

到以下日期格式?

2019-07-03

这就是我从 Soap Services 获得的字符串格式的样子

Public Class ContractBill
Public StartDate As Date
End Class
Dim ctrBill As New ContractBill With {
    .StartDate = Convert.ToDateTime(BillingData.START_DATE.ToString("yyyy-MM-dd"))
}

这是我将代码转换为所需格式的尝试,但是使用此 .StartDate 我收到错误:

System.InvalidCastException:“类型为“System.String”的对象无法转换为类型“System.IFormatProvider”。”

如何获得这种日期格式 yyyy-MM-dd?

【问题讨论】:

  • 现在是 07 还是 27?无论如何:Date.ParseExact("03.07.2019", "MM.dd.yyyy", Globalization.CultureInfo.CurrentCulture).ToString("yyyy-MM-dd")
  • @JQSOFT 感谢您的帮助,我根据您的代码更正了我的问题,我是否收到此错误?我能做些什么? System.FormatException:“Calendar System.Globalization.GregorianCalendar 不支持字符串表示的 DateTime。”
  • 如果要返回 Date 类型,请删除 ToString(...)
  • 使用此代码,我得到这种格式“03.07.2019 00:00:00”,这不是我想要的 ..StartDate = Date.ParseExact(BillingData.START_DATE, "dd.MM.yyyy ", Globalization.CultureInfo.CurrentCulture),
  • @Michael A Date 没有格式。 String 可以。您要么想要一个 [非格式化] Date 值(可以稍​​后格式化),要么想要一个格式化的 String 值。选一个。您的ContractBill 类目前显然需要Date,因此您应该按照JQSOFT 的建议删除ToString() 调用,然后稍后当您实际显示值时(代码的那部分你没有显示)。

标签: vb.net


【解决方案1】:

. 没有日期格式,所以你必须先将 . 替换为 -/ 这样您就可以将日期解析为可用的格式。

string date = "03.07.2019";
DateTime value = Convert.ToDateTime(date.Replace(".", "-"));

VB.net

Dim date As String = "03.07.2019"
Dim value As DateTime = Convert.ToDateTime(date.Replace(".", "-"))

【讨论】:

  • 某些文化确实使用. 作为分隔符。还有. (带空格的点)。这就是CultureInfo 过载的原因。无论如何,这不是这样做的方式。
  • @Jimi 好吧,你这么说,但这样他就会实现他想要的。
  • 不,它也没有实现。显示的类需要一个 Date 对象,您提供的是一个字符串。试图将某些东西锤炼成看起来相似的形状,你不会取得任何好的成果。 + 我不是那种这么说的人。这些是国际编码的特定文化格式。 .Net 类反映了这些格式。我只是报告事实。
  • 查看问题上的 cmets。这就是你的做法(你不能替换 DateTime 对象中的 strings )。顺便说一句,你应该使用DateTime.TryParseExact()
  • @JQSOFT 不是战斗,只是讨论。我不会发布另一个看起来像是 手册 中关于 TryParseExact 的内容的副本/粘贴的答案。如果这个问题(已经看过无数次)没有得到适当的答案,我将投票关闭并删除或标记为重复(这应该是它的自然结果)。
【解决方案2】:

使用DateTime.TryParseExact 方法,因为您知道传入日期的格式:

Dim enUS As New CultureInfo("en-US")
Dim inbound As String = "03.07.2019"
Dim outbound As DateTime
If DateTime.TryParseExact(inbound, "MM.dd.yyyy", enUS, DateTimeStyles.None, outbound) Then
    Console.WriteLine("'{0}' is formated from: {1}", outbound.ToString("yyyy/dd/MM"), inbound)
Else
    Console.WriteLine("'{0}' is not in an acceptable format.", inbound)
End If

小提琴:Live Demo

【讨论】:

    猜你喜欢
    • 2020-11-20
    • 2013-12-28
    • 2014-01-18
    • 2019-10-13
    相关资源
    最近更新 更多