以下情况:有一个字符串的格式为"2012-02-25 07:53:04"
但最终,我宁愿以这种格式结束"25-02-2012 07:53:04"
我想我有两个选择。1是重新格式化字符串并将其四处移动,但我认为这不是一种干净的方法。
我考虑的另一种方法是将源字符串保存到日期参数中,然后将日期参数写回特定日期格式的字符串中。但这样做可能吗?
这样做:
DateTime.Parse("2012-02-25 07:53:04").ToString("dd-MM-yyyy hh:mm:ss");
请记住,这不是文化意识。如果你确实需要存储中间结果,你也可以很容易地做到:
var myDate = DateTime.Parse("2012-02-25 07:53:04");
var myDateFormatted = myDate.ToString("dd-MM-yyyy hh:mm:ss");
最后,如果不能保证输入格式始终有效,请检查TryParse()
。
其他人建议使用Parse
,但我建议使用TryParseExact
或ParseExact
,同时指定不变区域性,除非您真的想要使用当前区域性。例如:
string input = "2012-02-25 07:53:04";
DateTime dateTime;
if (!DateTime.TryParseExact(input, "yyyy-MM-dd HH:mm:ss",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dateTime))
{
Console.WriteLine("Couldn't parse value");
}
else
{
string formatted = dateTime.ToString("dd-MM-yyyy HH:mm:ss",
CultureInfo.InvariantCulture);
Console.WriteLine("Formatted to: {0}", formatted);
}
或者使用Noda时间:
string input = "2012-02-25 07:53:04";
// These can be private static readonly fields. They're thread-safe
var inputPattern = LocalDateTimePattern.CreateWithInvariantInfo("yyyy-MM-dd HH:mm:ss");
var outputPattern = LocalDateTimePattern.CreateWithInvariantInfo("dd-MM-yy HH:mm:ss");
var parsed = inputPattern.Parse(input);
if (!parsed.Success)
{
Console.WriteLine("Couldn't parse value");
}
else
{
string formatted = outputPattern.Format(parsed.Value);
Console.WriteLine("Formatted to: {0}", formatted);
}
解析为DateTime,然后重新格式化它。小心:始终使用IFormatProvider!
是的,这是很有可能的。您所需要做的就是使用DateTime.Parse
将string
解析为DateTime
结构,然后使用ToString()
将日期写回另一个具有所需格式的字符串。
您可以将其解析为日期对象,然后在使用日期时提供所需的格式。ToString方法:
date.ToString("dd-MM-yyyy hh:mm:ss");
是的,您可以使用自定义DateTime格式字符串来解析和重新格式化DateTime对象。
DateTime date = DateTime.ParseExact("2012-02-25 07:53:04", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
string formattedDated = date.ToString("dd-MM-yyyy HH:mm:ss");