2013-06-15 2 views
0

Привет всем Я написал код для разбора даты и времени следующим образомкультура для DateTime в C#

if (DateTime.TryParse(dsVchRecord.Tables[0].Rows[0]["Date"].ToString(), out _dtVoucherDate)) 
    _dtVoucherDate = Convert.ToDateTime(dsVchRecord.Tables[0].Rows[0]["Date"].ToString()); 
else 
    _dtVoucherDate = DateTime.ParseExact(dsVchRecord.Tables[0].Rows[0]["Date"].ToString(), "MM-dd-yyyy", CultureInfo.InvariantCulture); 

Который прекрасно работает в моей системе, как мой текущий формат даты и времени является MM/DD/YYYY, но в моей системе коллегой формат даты и времени является другой 15 June 2013, поэтому мой код не работает. Каким образом можно преобразовать дату в универсальном формат независимо от системной даты или какого-либо другого

+0

Если тип столбца в 'DataTable' уже' DateTime' не превращать его в 'string', а затем обратно в' DateTime'. Вместо этого используйте строго типизированный метод '' Field' (http://msdn.microsoft.com/en-us/library/system.data.datarow.field (v = vs.90) .aspx): 'dsVchRecord. Таблицы [0] .Rows [0] .Field («Дата») ' –

+0

Независимо от того, что вы делаете, не делайте ошибку, анализируя дату в одном формате, а затем пытаетесь в другом формате, если первый из них терпит неудачу. Это было бы очень плохо, потому что даты с дневным числом 12 или менее становятся двусмысленными по формату dd/mm/yyyy и mm/dd/yyyy. –

ответ

0

Использования DateTime.TryParseExact:

if (DateTime.TryParseExact(dsVchRecord.Tables[0].Rows[0]["Date"].ToString(), 
    "MM/dd/yyyy", CultureInfo.InvariantCulture, 
    DateTimeStyles.None, out _dtVoucherDate)) 
//the rest of it 
+0

Это не формат, используемый OP в его подходе «ParseExact». –

+0

@TimSchmelter Ой, извините. Исправлена. –

0

Первых синтаксического DATETIME с CultureInfo.InvariantCulture

DateTime dt = DateTime.Parse(dsVchRecord.Tables[0].Rows[0]["Date"].ToString(), CultureInfo.InvariantCulture) 

затем Get Current Культуры

CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture; 

затем передать объект DateTime в текущая культура

dt = DateTime.Parse(dt.ToString(cultureInfo)) 
+0

Вы имеете в виду разбор сначала с инвариантной культурой, а затем, если это не удается и проанализировать его с текущей культурой? –

1

Это не представляется возможным обрабатывать все форматы, но вы можете speicify несколько разрешенных форматов для ParseExact:

var str = dsVchRecord.Tables[0].Rows[0].Field<String>("Date"); 
var allowedFormats = new[] { "MM-dd-yyyy", "dd MMM yyyy" }; 
_dtVoucherDate = DateTime.ParseExact(str, allowedFormats, CultureInfo.InvariantCulture, DateTimeStyles.None); 

Примечание: Если тип столбца в DataTable уже DateTime не конвертируйте его в string, а затем обратно в DateTime. Вместо того, чтобы использовать строго типизированный метод Field расширения:

dsVchRecord.Tables[0].Rows[0].Field<DateTime>("Date") 
Смежные вопросы