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

Pau*_*haw 0 .net c#

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

我需要这样的东西:

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);
Run Code Online (Sandbox Code Playgroud)

我显然可以编写一个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

Jon*_*eet 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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