将字符串中的日期替换为另一种日期格式

时间:2014-06-04 09:38:35

标签: c#

我有一个字符串

Subject: Trip Ticket\r\nDate: Sun, 18 May 2014 0:59:56 -0400\r\nImportance: 
Normal\r\nX-Mailer: Symposium Technologies Inc.

我想将Sun, 18 May 2014 0:59:56 -0400之类的日期替换为27 May 14 16:28:00 UT之类的日期。其中日期不是静态的,可以有任何日期。我使用索引来做,但我认为它不正确,因为0:59:56将来可能是10:59:56,然后它会开始给出错误。任何人都可以知道如何准确地做到这一点。

4 个答案:

答案 0 :(得分:3)

不确定。只需将问题分解成更小的部分:

  1. 从完整字符串中提取日期(字符串),例如,使用String.Split两次:首先在行分隔符上,然后在:上。
  2. 使用DateTime.ParseExact将日期字符串转换为DateTime
  3. 使用DateTime.ToStringDateTime转换为所需的格式。
  4. 将格式化日期重新插入字符串。
  5. 但请注意,您的文字看起来像电子邮件,并且电子邮件中的Date:标题必须具有此格式(请参阅{ {3}},第3.3节。

答案 1 :(得分:0)

使用它:

myDate.ToUniversalTime().ToString("r")
// It Displays :  Thu, 09 Apr 2014 11:45:09 GMT

或者:

myDate.ToString("m", CultureInfo.CreateSpecificCulture("ms-MY"))
// Displays 09 April

答案 2 :(得分:0)

您可以使用String.Format()

     var str =  string.Format(
                "Subject: Trip Ticket\r\nDate: {0}\r\nImportance: Normal\r\nX-Mailer: Symposium Technologies Inc.",
                yourDate);

答案 3 :(得分:0)

日期似乎总是在一行的开头,此规则是否始终适用?

  

是的,这总是适用,它以行开头,以行结束

然后你可以替换这条线。例如:

string newDate = "27 May 14 16:28:00 UT";
string text = "Subject: Trip Ticket\r\nDate: Sun, 18 May 2014 0:59:56 -0400\r\nImportance: Normal\r\nX-Mailer: Symposium Technologies Inc.";
var newLines = text.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
    .Select(l => new { Line = l, DateIndex = l.IndexOf("Date:", StringComparison.OrdinalIgnoreCase) })
    .Select(x => x.DateIndex == -1 ? x.Line : x.Line.Substring(0, x.DateIndex) 
                                           + string.Format("Date: {0}", newDate));
text = string.Join(Environment.NewLine, newLines);