将任何字符串格式化为字符串“;yyyy/MM/dd”;
本文关键字:字符串 MM dd yyyy 任何 格式化 | 更新日期: 2023-09-27 18:28:27
我有很多字符串,比如"20120117"answers"20120321"。我需要将其转换为一个新的字符串,格式为:"2012/01/17"answers"2012/03/21"。那么,有办法做到这一点吗?
我尝试:
string dateString = string.format("{0:d", "20120321");
和
string dateString = string.format("{0:yyyy/MM/dd", "20120321");
和
string dateString = int.Parse("20120321").ToString("yyyy/MM/dd");
我总是担心我达不到目标
那么,我可以这样做吗?
OBS:有没有一种方法可以做到这一点,而不需要解析到日期时间?
您必须首先解析DateTime
对象中的这些值。
示例:
DateTime dt = DateTime.ParseExact("20120321", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
var result = dt.ToString("yyyy/MM/dd");
在对其他答案发表评论后进行编辑:如果您不喜欢解析,因为它可能会抛出异常,那么您可以始终使用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");
}
编辑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);
}
当使用"20120321"作为输入值时,它将产生2012/03/21
,当使用2012
作为输入值则产生2012/01/01
。
DateTime.ParseExact("20120321", "yyyyMMdd", CultureInfo.CurrentCulture).ToString("yyyy/MM/dd")
您可以解析字符串,但此方法可以在没有任何额外代码的情况下进行验证。想象一下,收到"20120230"、"20110229"或任何其他无效日期。
根据您的评论:
有没有一种方法可以在不解析到日期时间的情况下做到这一点?
是的,当然。如果真的想通过系统传播坏数据,而不是强调它是不正确的,那么你肯定可以使用:
// Make sure we'll always be able to get a result whatever the input.
string paddedInput = input + "????????";
string mightBeBadWhoKnows = string.Format("{0}/{1}/{2}",
paddedInput.Substring(0, 4), // The year, if we're lucky
paddedInput.Substring(4, 2), // The month, if we're lucky
paddedInput.Substring(6, 2)); // The day, if we're lucky
但是为什么不想发现坏数据呢?
您绝对应该解析数据。如果您希望在收到错误数据并采取适当措施后能够继续,请使用DateTime.TryParseExact
。如果您对抛出异常感到高兴,请使用DateTime.ParseExact
。我建议在解析和格式化时都使用不变的区域性,除非您真的想要一个对区域性敏感的输出。
使用DateTime.ParseExact转换为DateTime,然后在该实例上使用ToString进行格式化。
DateTime.ParseExact(dateString, "yyyyMMdd").ToString("yyyy/MM/dd");
编辑:使用插入:EDIT2:修复错误:-)
var newString = dateString.Insert(4, "/").Insert(7, "/");
只需使用字符串操作插入斜杠:
string input = "20120321";
string dateString =
input.Substring(0, 4) + "/" +
input.Substring(4, 2) + "/" +
input.Substring(6);
或
string dateString = input.Insert(6, "/").Insert(4, "/");
如果是日期,请尝试以下操作:
DateTime.ParseExact("20120321","yyyyMMdd", null).ToString("yyyy/MM/dd", System.Globalization.DateTimeFormatInfo.InvariantInfo)
试试这个;
string dateString = DateTime.ParseExact("20120321", "yyyyMMdd",
null).ToShortDateString();
如果您的数据始终是相同的格式,并且您不需要验证它,您可以使用以下代码段来避免使用DateTime 解析它
var strWithInsert = input.Insert(4,"/").Insert(7,"/");