与CultureInfo约会的C#字符串

时间:2013-09-20 12:58:00

标签: c# datetime

我的日期格式如下。它始终采用这种格式。

yyyyMMdd  ->  20130912

我需要将其转换为日期。但我需要确保将日期转换为PC的正确日期格式。 Cultureinfo.InvariantCulture。这是我的代码现在的样子。

DateTime parsedDateTime;
int year = Int32.Parse(rows[row][4].ToString().Substring(0, 4));
int month = Int32.Parse(rows[row][4].ToString().Substring(4, 2));
int day = Int32.Parse(rows[row][4].ToString().Substring(6, 2));
DateTime value = new System.DateTime(year, month, day);

bool DateTimeParseFail = DateTime.TryParse(value.ToString("yyyy-MM-dd"),   CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDateTime);

if (!DateTimeParseFail) {
   msg = "Data Feed Convert string to DateTime: Date " + rows[row][4].ToString() + " - " + value.ToString();
   ComponentMetaData.FireError(0, ComponentMetaData.Name, msg, string.Empty, 0, out pbCancel);
   throw new Exception(msg);
}  else {
   buffer[colIndex] = parsedDateTime;
}

这对我来说太过分了,我怀疑我是在考虑它。必须有一种更简单的方法来做到这一点。但我所尝试的一切都没有像我预期的那样发挥作用。

2 个答案:

答案 0 :(得分:2)

试试这个:

string dateText = rows[row][4].ToString();
DateTime date = DateTime.ParseExact(dateText, "yyyyMMdd", CultureInfo.InvariantCulture);
string result = date.ToShortDateString(CultureInfo.InvariantCulture.DateTimeFormat.ShortDatePattern);

请注意,我假设你的断言日期总是这种格式是正确的。如果不是,你会发现代码抛出异常。

(你发布的代码表明你的断言不正确,因为你有一个后备格式,并且有一些失败处理......)

答案 1 :(得分:1)

使用DateTime的TryParseExact ....

var dateString = "20130912"; //rows[row][4].ToString()
DateTime parsedDateTime;
var DateTimeParseFail= DateTime.TryParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDateTime);

if (!DateTimeParseFail) {
   msg = "Data Feed Convert string to DateTime: Date " + rows[row][4].ToString() + " - " + value.ToString();
   ComponentMetaData.FireError(0, ComponentMetaData.Name, msg, string.Empty, 0, out pbCancel);
   throw new Exception(msg);
}  else {
   buffer[colIndex] = parsedDateTime;
}