控制台应用程序:用户输入日期 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的主要内容,如果未能解决你的问题,请参考以下文章

Visual C# 异常处理(仅输入数字和“。”)[重复]

C# 控制台日期输入

用java写用户在控制台按照“yyyy/mm/dd”的格式输入出生日期,请计算用户的年龄

使用 Visual Studio Code 在终端中运行 Dart 控制台应用程序

控制台I/O-标准输入读取数据-格式化输入,日期

如何在 Access 2007 中使用 Visual Basic 代码更新单元格