大家好我编写了一个解析日期时间的代码,如下所示
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 :(得分:1)
无法处理所有格式,但您可以为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
,然后再转回{{1 }}。而是使用强类型Field
扩展方法:
DateTime
答案 1 :(得分: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
答案 2 :(得分:0)
首先使用CultureInfo.InvariantCulture解析Datetime
DateTime dt = DateTime.Parse(dsVchRecord.Tables[0].Rows[0]["Date"].ToString(), CultureInfo.InvariantCulture)
然后获取当前文化
CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
然后将DateTime对象传递到当前文化
dt = DateTime.Parse(dt.ToString(cultureInfo))