将一组数字转换为日期

Kev*_*vin -3 c# datetime

我有一个具有这种格式的字符串

20150622
yyyyMMDD
Run Code Online (Sandbox Code Playgroud)

但我需要将其转换为以下格式

year-month-date
2015-06-22
Run Code Online (Sandbox Code Playgroud)

在C#中有办法做我需要的吗?我还没有看到在C#中将字符串视为数组,那么它有什么用呢?

Jam*_*iec 6

我不认为无论如何在C#中将字符串视为数组

字符串 .NET 中的数组.它们是字符阵列,但这对你没有帮助!

你要做的是解析一个字符串来创建一个日期.这是通过DateTime.Parse及其许多过载/变体完成的

最明显的方法是使用ParseExact(或者,可能更恰当TryParseExact):

var myDate = DateTime.ParseExact("20150622","yyyyMMdd",CultureInfo.CurrentCulture);
Run Code Online (Sandbox Code Playgroud)

要完全回答您的问题,您可以通过DateTime使用所需格式格式化来重新生成字符串.


另一件需要考虑的事情是,如果你从不对日期本身感兴趣,那么你可以使用一些字符串混搭来完成你的任务.

你想要的是{chars0-3}{hyphen}{chars4-5}{hyphen}{chars6-7},这很容易

var input = "20150622";
var output = String.Format("{0}-{1}-{2}",
                     input.Substring(0,4),
                     input.Substring(4,2),
                     input.Substring(6,2))
Run Code Online (Sandbox Code Playgroud)


Son*_*nül 6

您可以DateTime使用yyyyMMdd格式解析字符串(没有DD说明符)并使用yyyy-MM-dd格式生成字符串表示形式;

string s = "20150622";
DateTime dt = DateTime.ParseExact(s, "yyyyMMdd", CultureInfo.InvariantCulture)
Console.WriteLine(dt.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)

输出;

2015-06-22
Run Code Online (Sandbox Code Playgroud)

但是如果您的字符串部分不在格里高利历的年,月和日范围内,则此解决方案将无效.在这种情况下,您可以使用String.Substring方法获取字符串的一部分,并使用-分隔符格式化它们;

var s = "20150622";
var result = String.Format("{0}-{1}-{2}",
                            s.Substring(0,4),
                            s.Substring(4,2),
                            s.Substring(6,2));
Run Code Online (Sandbox Code Playgroud)

结果;

2015-06-22
Run Code Online (Sandbox Code Playgroud)