控制台应用程序:用户输入日期Visual Basic

时间:2014-09-24 21:09:39

标签: vb.net

我正在使用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”

如何格式化输入的日期以便将其识别为有效的日期时间?

由于

2 个答案:

答案 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。正如您所写的那样,命令输入会覆盖您的格式化字符串,因此您的格式化字符串实际上是无用的。