我有一个具有此格式的字符串
20150622
yyyyMMDD
但我需要将其转换为以下格式
year-month-date
2015-06-22
C#有办法做我需要的吗?我还没有看到在C#中将字符串视为数组,那么它有什么用呢?
答案 0 :(得分:6)
我还没有看到在C#
中将字符串视为数组
.NET中的字符串是数组。它们是字符数组,但这对你没有帮助!
您尝试做的是解析一个字符串来创建日期。这是通过DateTime.Parse
及其许多重载/变体
最明显的方法是使用ParseExact
(或者,可能更恰当TryParseExact
):
var myDate = DateTime.ParseExact("20150622","yyyyMMdd",CultureInfo.CurrentCulture);
要完全回答您的问题,您可以通过使用所需格式格式化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))
答案 1 :(得分: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));
输出;
2015-06-22
但如果您的字符串部分不在Gregorian calendar的年,月和日范围内,则此解决方案无法正常工作。在这种情况下,您可以使用String.Substring
method获取字符串的一部分,并使用-
分隔符格式化它们;
var s = "20150622";
var result = String.Format("{0}-{1}-{2}",
s.Substring(0,4),
s.Substring(4,2),
s.Substring(6,2));
结果;
2015-06-22