是否可以将日期字符串从一种格式转换为另一种格式,而无需将它们实际转换为日期?
我需要这样的东西:
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
答案 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);