将任何字符串格式化为字符串"yyyy/MM/dd"

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:有一种方法可以做到这一点,而无需解析到日期时间?

Aus*_*nen 6

DateTime.ParseExact("20120321", "yyyyMMdd", CultureInfo.CurrentCulture).ToString("yyyy/MM/dd")
Run Code Online (Sandbox Code Playgroud)

您可以解析字符串,但此方法为您提供验证,而无需任何额外的代码.想象一下收到"20120230","20110229"或任何其他无效日期.


Shi*_*rod 5

您必须首先解析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作为输入值.