Update Мое решение:Преобразовать необычную строку DateTime ж/из Еогеасп
var rowsToAdd = (from t in dtEntry.AsEnumerable().Cast<DataRow>()
let startDate = (
t.Field<string>("StartDate").Length > 0)
? DateTime.Parse(t.Field<string>("StartDate").Split(new Char [] {'('})[0], CultureInfo.InvariantCulture)
: DateTime.Today.AddMonths(-3)
where startDate > filterDate
select t);
Оригинал Вопрос: Я получаю строку DateTime из внешнего API, который выглядит следующим образом:
10/14/2014 8:30 AM (America/Los Angeles)
У меня есть все данные в datatable, называемый dtEntry, который я использую ниже.
Ни одна из встроенных функций преобразования C# DateTime не работает. Все они приводят к форматированию исключений. Кто-нибудь знает, как я могу это сделать? Другая проблема заключается в том, что я использую LINQ (см. Ниже).
DataRow[] rows = (from t in dtEntry.AsEnumerable().Cast<DataRow>()
let startDate = (
t.Field<string>("StartDate").Length > 0)
? DateTime.Parse(t.Field<string>("StartDate"))
: DateTime.Today.AddMonths(-3)
where startDate > filterDate
select t).ToArray();
Любые идеи? У меня есть тернарный оператор, потому что мне нужно также обрабатывать пустые строки.
Нет ничего встроенного в .NET, чтобы разобрать это. Вы либо должны предварительно проанализировать это, и сохранить дату UTC, либо разделить строку на две части. В первой половине даты/времени (например, '' 10/14/2014 8:30 AM '') вы можете разобрать обычным образом. Во-вторых, вам придется проанализировать смещение, с помощью которого вы можете сделать результат первого анализа в формате UTC. –
Также, чтобы исключить исключения, вы можете использовать TryParse вместо Parse. Это, по крайней мере, позволит вам справиться с ошибкой лучше. http://msdn.microsoft.com/en-us/library/system.datetime.tryparse(v=vs.110).aspx – tdbeckett
Я не понимаю, как вы разбираете "10/14/2014 8:30 (Америка/Лос-Анджелес) "* с foreach * ... Не могли бы вы показать образец? –