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 = 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

4

3 回答 3

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为每个输入和输出创建一个,然后重复使用它们。

于 2012-04-12T11:54:30.317 回答
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);
于 2012-04-12T11:56:14.127 回答
-3
string s = System.Convert.ToDateTime(System.Convert.ToDateTime(inputDateString).ToString(inputFormat)).ToString(ouputFormat);
System.Console.Write(s);
于 2012-04-12T11:58:48.157 回答