2015-07-30 2 views
-1

Я искал в SO, но не смог найти ответы, которые будут работать для меня.способы проверить, действительно ли время datetime

У меня есть значение dateTime в C#, и я хотел бы проверить, имеет ли его допустимое значение. Например, если следующее значение передается в datetimeupdate (которое имеет тип datetime), я должен иметь возможность генерировать исключение.

datetimeupdate= 2015-07-29T19:55:10.994sdfsdf 

Я попытался использовать Tryparse, но он принимает строку в качестве первого параметра. Но параметр datetimeupdate имеет тип datetime. Я не уверен, как проверить, имеет ли параметр действительное значение.

Я не могу сделать передний конец validition, как это в WebAPI и то значение, я получаю (с недопустимыми символами)

+3

Если его тип DateTime, то он должен быть действительным, вы не можете добавить недопустимые данные структура datetime ... откуда берется «sdfsdf»? –

+1

Пожалуйста, отправьте код, который 1. компилирует и 2. показывает проблему, о которой вы говорите. –

+1

Единственной допустимостью, которую вы можете проверить на 'DateTime', является то, что« не может быть в будущем »или« не может быть более 100 лет назад ». То, что вы показываете, выглядит как 'string' и' DateTime.TryParse' вернет false для этого значения. – juharr

ответ

0
using System; 

public class Program 
{ 
    public static void Main() 
    { 
     try 
     { 
     string d = "2015-07-29T19:55:10.994sdfsdf"; 
     DateTime dt = Convert.ToDateTime(d); 

     Console.WriteLine(dt); 
     } 
     catch(FormatException) 
     { 
      Console.WriteLine(" Date is InValid "); 
     } 
    } 
} 
+0

'Convert.ToDateTime' - это ленивая реализация метода DateTime.Parse; и, как правило, следует избегать, если это не совсем необходимо. Источник: http://referencesource.microsoft.com/#mscorlib/system/convert.cs,1724 –

1

Что у вас есть строковое представление даты-времени. Вы можете использовать метод TryParse(), как показано ниже; который вернет TRUE, если синтаксический анализ завершится успешно.

static void Main(string[] args) 
    { 
     string str = "2015-07-29T19:55:10.994sdfsdf"; 
     Console.WriteLine(IsvalidDateTime(str)); 

    } 

    static bool IsvalidDateTime(string date) 
    { 
     DateTime dt; 
     return DateTime.TryParse(date, out dt); 
    } 
0

DateTime форматы довольно широко между различными странами/регионами. Например, здесь, в Sweden, мы следуем за кодом ISO 8601 -format — yyyy-MM-dd. В США стандартный формат: M/d yyyy

Что касается «действительности» даты; сложно сказать.
Опоздать: 2015-07-29T19:55:10.994sdfsdf. И это может быть справедливо, если ваша программа может обрабатывать (и анализировать) этот ввод.

Самое простое решение вашей проблемы является использование DateTime.Parse или DateTime.TryParseExact (если вы знаете, какой формат ваша дата в)

string dateString = "2015-07-30 18:00:00.142" 
string dateFormat = "yyyy-MM-dd HH:mm:ss.fff" 


DateTime parsedDate; 

bool parseSuccess = DateTime.TryParseExact(
    s: dateString, 
    format: dateFormat, 
    provider: CultureInfo.CurrentCulture, 
    style: DateTimeStyles.None, 
    result: out parsedDate 
); 

if (parseSuccess) 
{ 
    // valid 
} 
else 
{ 
    // not valid 
} 

Если формат строкового представления DateTime неизвестна, вы можете используйте DateTime.Parse или DateTime.TryParse.

string dateString = "2015-07-30 18:00:00.142" 
DateTime parsedDate; 

if (DateTime.TryParse(dateString, out parsedDate)) 
{ 
    // valid 
} 
else 
{ 
    // not valid 
} 

Однако, несмотря на достаточно широко — они приходят без гарантии разбора «правильный» дату, так как конечный пользователь может быть наведена дату в другом формате, чем ожидалось. И вы можете оказаться в часах вместо месяцев; что может иметь некоторые совершенно неожиданные последствия.

Некоторое чтение

Смежные вопросы