我正在使用VS 2013和VB语言
我的任务是以mm / dd / yyyy
格式存储用户输入的日期 Dim date1 As String = Format("MM/dd/yyyy")
Dim date2 As Date
Dim date3 As Date
date1 = Console.ReadLine()
date2 = DateTime.Now
date3 = DateTime.Parse(date1)
Console.ReadLine()
我首先尝试输入日期为Dim date1作为日期,但输入mm / dd / yyyy格式无效。
所以我尝试了这个方法,并得到错误“字符串未被识别为有效的DateTime”
如何格式化输入的日期以便将其识别为有效的日期时间?
由于
答案 0 :(得分:2)
不能强制用户以您期望的格式输入日期(特别是在控制台应用程序上)。因此,您的最佳行动是尝试解析此日期并通知您的用户输入无效
Dim isValid = False
Dim dt As DateTime
While(Not isValid)
Console.WriteLine("Please enter a date in the format MM/dd/yyyy")
Dim input = Console.ReadLine()
isValid = DateTime.TryParseExact(input, "MM/dd/yyyy", _
CultureInfo.InvariantCulture, DateTimeStyles.None, dt)
End While
DateTime.TryParseExact是DateTime的一种方法,它尝试根据指定的格式解析输入字符串。如果字符串符合所需格式,则该方法返回true,最后一个参数设置为转换产生的日期时间。否则,该方法返回false而不抛出异常,因此您可以采取适当的措施(在这种情况下再次请求输入)
答案 1 :(得分:0)
所有日期都作为日期存储在内存中,并且实际上没有格式。将日期更改为字符串时(即使用Date.ToString()
方法),会显示格式。
我认为这里最好的选择是使用没有参数的Date.Parse()
,这样命令行将接受所有日期格式(准备捕获格式异常),然后当你需要显示日期时返回给用户,使用格式字符串和Date.ToString()
方法对其进行格式化。
代码示例如下:
Dim strDateFormat = "MM/dd/yyyy"
Dim date2 As Date
Dim date3 As Date
date2 = Now()
date3 = Date.Parse(Console.ReadLine())
Console.WriteLine(date3.ToString(strDateFormat))
P.S。正如您所写的那样,命令输入会覆盖您的格式化字符串,因此您的格式化字符串实际上是无用的。