简化字符串拆分

时间:2013-12-03 19:56:38

标签: c# string datetime

我从SQL查询中获得了这样的结果“PR242714031213”。这基本上是字符串PR + ssmmHHddMMyy。我需要提取并格式化为一个简单的日期ddMMyyyy。 我正在使用以下代码片段,其中包含正在运行的子字符串:

 string rawDate =  (string)lastProjaddedDate.ExecuteScalar();
             string year= rawDate.Substring(12,2);
             string month=rawDate.Substring(10,2);
             string day=rawDate.Substring(8,2);
             string date = day + "/" + month + "/" +"20"+ year;
             Label4.Text =date;

我想知道我是否可以简化代码以获取ddMMyyyy。

PS:我知道我需要改变它在数据库中的编码方式,以避免几十年内的问题,但让我们开始简化它。

3 个答案:

答案 0 :(得分:4)

你可以这样做:

Step - 1: Strip `PR` from the string
Step - 2: Parse to .Net `DateTime` object
Step - 3: Format to required format

代码:

string rawDate = "PR242714031213";
rawDate = rawDate.Substring(2);
DateTime dt;

if (!DateTime.TryParseExact(rawDate, 
                           "ssmmHHddMMyy", 
                           CultureInfo.InvariantCulture, 
                           DateTimeStyles.None, 
                           out dt))
{
    //invalid date
}

string formattedDate = dt.ToString("ddMMyyyy");

在一个声明中,它将是:

string formattedDate = DateTime.ParseExact(rawDate.Substring(2),
                            "ssmmHHddMMyy",
                             CultureInfo.InvariantCulture)
                            .ToString("ddMMyyy");

答案 1 :(得分:3)

假设您更新日期存储在数据库中的方式,您只需要:

DateTime.ParseExact(rawDate.Substring(2), "ssmmHHddMMyyyy", CultureInfo.InvariantCulture).ToString("ddMMyyyy");

否则暂时使用以下内容:

DateTime.ParseExact(rawDate.Substring(2), "ssmmHHddMMyy", CultureInfo.InvariantCulture).ToString("ddMMyyyy");

在任何情况下,您都可以在ToString()方法中选择您想要的任何格式。

答案 2 :(得分:0)

正则表达式将为您提供简洁的代码,并将验证作为奖励:

var match = Regex.Match(rawDate, @"PR\d{6}(?<d>\d\d)(?<m>\d\d)(?<y>\d\d)");
string date = match.Groups["d"].Value + "/" + match.Groups["m"].Value + "/20" + match.Groups["y"].Value;