C#日期字符串到不同的格式没有先转换为日期

时间:2012-04-12 11:51:04

标签: c# .net

是否可以将日期字符串从一种格式转换为另一种格式,而无需将它们实际转换为日期?

我需要这样的东西:

string inputDateString = "01/01/2012 23:36:17.234";
string inputFormat = "dd/MM/yyyy HH:mm:ss.fff";

string ouputFormat = "yyyy/MM/dd HH:mm:ss.fff";
string outputDateString = StringDate.Convert(inputDateString,inputFormat, outputFormat);

我显然可以编写一个StringDate类来解析格式,但这似乎就像重新发明轮子一样。我不能先约会的原因是我在时区/服务器时间遇到了很多问题,并且无法控制运行它的环境。我只是想100%确定日期字符串刚刚被重新安排,而不是搞砸了!

由于

修改 输出格式将始终相同,但输入格式可以是以下任意组合:

时间变化: HH:MM:SS.FFF HH:MM:SS HH:MM

日期变化(可能更多): DD / MM / YYYY DD / MM / YY MM / DD / YYYY MM / DD / YY YYYY / MM / DD yy / MM / dd

3 个答案:

答案 0 :(得分:7)

你应该绝对首先解析它。您只需要小心如何解析它并格式化它。仅仅因为你过去遇到时区问题并不意味着你应该避免解析/格式化 - 这意味着你应该根据时区来计算你想要做的事情。 听起来就像您只想将数据视为本地数据一样。我怀疑你要指定DateTimeStyles.AssumeLocal并使用不变文化。

DateTime.ParseExact与您期望的完全格式(以及特定文化,可能是不变文化)一起使用,然后使用输出格式再次调用ToString,相关文化。

另请注意,您期望的格式字符串不正确 - 当您指的是hh时,您使用HH,我怀疑您需要fff而不是mmm 。示例代码:

using System;
using System.Globalization;

public class Test
{
    static void Main()
    {
        string inputDateString = "01/01/2012 23:36:17.234";
        string inputFormat = "dd/MM/yyyy HH:mm:ss.fff";        
        string outputFormat = "yyyy/MM/dd HH:mm:ss.fff";

        DateTime parsed = DateTime.ParseExact(inputDateString, inputFormat,
                                              CultureInfo.InvariantCulture,
                                              DateTimeStyles.AssumeLocal);
        string outputDateString = parsed.ToString(outputFormat, 
                                                  CultureInfo.InvariantCulture);
        Console.WriteLine(outputDateString); // Prints 2012/01/01 23:36:17.234
    }
}

您可能还想查看我的Noda Time项目,该项目允许您为每个输入和输出创建LocalDateTimePattern,然后重复使用它们。

答案 1 :(得分:0)

这应该有效:

string inputDateString = "01/01/2012 23:36:17.234";
string inputFormat = "dd/MM/yyyy HH:mm:ss.fff";

string ouputFormat = "yyyy/MM/dd HH:mm:ss.fff";

string outputDateString = DateTime.ParseExact(inputDateString, inputFormat, System.Globalization.CultureInfo.InvariantCulture).ToString(ouputFormat);

答案 2 :(得分:-3)

string s = System.Convert.ToDateTime(System.Convert.ToDateTime(inputDateString).ToString(inputFormat)).ToString(ouputFormat);
System.Console.Write(s);