2014-09-24 3 views
0

Я использую VS 2013 и VB языкконсоли: Введенный пользователем дата Visual Basic

Моя задача состоит в том, чтобы сохранить введенный пользователем дату в формате мм/дд/гггг

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 как Date, но ввод ее в mm/dd/yyyy является недопустимым.

Так что я попробовал этот метод, и получаю ошибку «Строка не была признана в качестве действительного DateTime»

Как отформатировать введенную дату, так что он будет признан действительным DateTime?

Благодаря

ответ

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, а последний параметр - в datetime, являющемся результатом преобразования. В противном случае метод возвращает false, не выдавая исключение, поэтому вы можете принять соответствующие меры (в этом случае снова запросить ввод)

+0

Спасибо, Steve, Я получаю ошибку, что CultureInfo и DateTimeStyles не объявлены и недоступны из-за уровня защиты. – Stormy

+0

Если вы посмотрите сообщение об исключении, вы увидите ссылку «Импорт System.Globalization». Вы должны добавить это пространство имен, чтобы получить перечисление, используемое в этом методе (такая проблема возникает в [этом вопросе] (http://stackoverflow.com/questions/26013105/code-modified-lines-added/26013694#26013694)) – Steve

+0

Спасибо Стив, который исправил все мои проблемы. Я попробовал код, похожий на то, что вы отправили раньше, и если бы я знал, что это все, что мне нужно было сделать, мне, вероятно, не пришлось бы задавать вопрос. Ваша помощь безусловно оценена! – Stormy

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. Как вы его написали, ввод команды перезаписывает вашу строку форматирования, поэтому ваша строка форматирования фактически бесполезна.