控制台应用程序:用户输入日期 Visual Basic
Posted
技术标签:
【中文标题】控制台应用程序:用户输入日期 Visual Basic【英文标题】:Console Application: User entered date Visual Basic 【发布时间】:2014-09-24 21:09:38 【问题描述】:我使用的是 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 输入的格式无效。
所以我尝试了这种方法,并得到错误“字符串未被识别为有效的日期时间”
如何格式化输入的日期,以便将其识别为有效的日期时间?
谢谢
【问题讨论】:
【参考方案1】:不能强制用户以您期望的格式输入日期(尤其是在控制台应用程序中)。因此,您最好的做法是尝试解析此日期并通知您的用户输入无效
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 而不会引发异常,因此您可以采取适当的措施(在这种情况下再次请求输入)
【讨论】:
谢谢史蒂夫,我收到了未声明 CultureInfo 和 DateTimeStyles 并且由于保护级别而无法访问的错误。 如果您查看异常消息,您应该会看到一个Import System.Globalization
链接。您应该添加此命名空间以获取此方法中使用的枚举(this question 中的此类问题)
感谢史蒂夫解决了我的所有问题。我尝试过与您之前发送的代码类似的代码,如果我知道这就是我需要做的一切,我可能就不必问这个问题了。非常感谢您的帮助!
我很高兴能提供帮助。正因为你是这个网站的新用户,我推荐阅读How to accept answers【参考方案2】:
所有日期都作为日期存储在内存中,实际上没有格式。当您将日期更改为字符串时(即使用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))
附:正如您所写的那样,命令输入会覆盖您的格式化字符串,因此您的格式化字符串实际上是无用的。
【讨论】:
以上是关于控制台应用程序:用户输入日期 Visual Basic的主要内容,如果未能解决你的问题,请参考以下文章
用java写用户在控制台按照“yyyy/mm/dd”的格式输入出生日期,请计算用户的年龄