Vin*_*oni 0 c# string formatting
我有许多字符串,如"20120117"和"20120321".我需要使用以下格式的新字符串转换它:"2012/01/17"和"2012/03/21".那么,有一种方法可以做到这一点?
我尝试:
string dateString = string.format("{0:d", "20120321");
Run Code Online (Sandbox Code Playgroud)
和
string dateString = string.format("{0:yyyy/MM/dd", "20120321");
Run Code Online (Sandbox Code Playgroud)
和
string dateString = int.Parse("20120321").ToString("yyyy/MM/dd");
Run Code Online (Sandbox Code Playgroud)
在所有情况下,我都达不到目标.= /
所以,我可以这样做吗?
OBS:有一种方法可以做到这一点,而无需解析到日期时间?
DateTime.ParseExact("20120321", "yyyyMMdd", CultureInfo.CurrentCulture).ToString("yyyy/MM/dd")
Run Code Online (Sandbox Code Playgroud)
您可以解析字符串,但此方法为您提供验证,而无需任何额外的代码.想象一下收到"20120230","20110229"或任何其他无效日期.
您必须首先解析DateTime对象中的这些值.
示例:
DateTime dt = DateTime.ParseExact("20120321", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
var result = dt.ToString("yyyy/MM/dd");
Run Code Online (Sandbox Code Playgroud)
在对其他答案发表评论后编辑:如果你不喜欢解析,因为它可能会引发异常,你可以随时使用TryParse,如下所示:
DateTime dt;
bool success = DateTime.TryParseExact("20120321", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt);
if (success)
{
var result = dt.ToString("yyyy/MM/dd");
}
Run Code Online (Sandbox Code Playgroud)
编辑2:使用TryParseExact多种格式:
DateTime dt;
string[] formats = { "yyyyMMdd", "yyyy" };
bool success = DateTime.TryParseExact("20120321", formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt);
if (success)
{
var result = dt.ToString("yyyy/MM/dd");
Console.WriteLine(result);
}
Run Code Online (Sandbox Code Playgroud)
它会产生 2012/03/21当使用"20120321"作为输入值,并且2012/01/01当使用2012作为输入值.