0

大家好,我已经编写了一个代码来解析日期时间,如下所示

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,所以我的代码在那里失败。无论系统日期或其他日期如何,如何将日期转换为通用格式

4

3 回答 3

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,然后再转换回DateTime。而是使用强类型Field扩展方法:

dsVchRecord.Tables[0].Rows[0].Field<DateTime>("Date")
于 2013-06-15T13:02:23.933 回答
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
于 2013-06-15T12:46:37.520 回答
0

首先使用 CultureInfo.InvariantCulture 解析日期时间

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))
于 2013-06-15T12:49:55.707 回答