是否可以将日期字符串从一种格式转换为另一种格式,而无需将它们实际转换为日期?
我需要这样的东西:
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
您应该绝对第一解析它.你只需要小心你如何解析它并格式化它.仅仅因为你过去遇到时区问题并不意味着你应该避免解析/格式化 - 这意味着你应该根据时区来计算你想要做的事情.这听起来像你只是想数据视为本地.我怀疑你想要指定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为每个输入和输出创建一个,然后重复使用它们.