我有一个字符串字段,其日期显示为 MM/DD/YYYY,但我需要它是 YYYY-MM-DD。
这是它的样子:
DateReported = (e.Attribute("hciIIDateReported")
我想也许我可以做一个 string.Format() 但我找不到只给出 YYYY-MM-DD 的自定义日期和时间格式字符串。我在那种格式中找到的那个是随时间一起来的,这是行不通的。有什么建议吗?
我有一个字符串字段,其日期显示为 MM/DD/YYYY,但我需要它是 YYYY-MM-DD。
这是它的样子:
DateReported = (e.Attribute("hciIIDateReported")
我想也许我可以做一个 string.Format() 但我找不到只给出 YYYY-MM-DD 的自定义日期和时间格式字符串。我在那种格式中找到的那个是随时间一起来的,这是行不通的。有什么建议吗?
根据 Henk 的帖子,我几乎投票赞成重复,但注意到你说你“找不到只给出 YYYY-MM-DD 的自定义日期和时间格式字符串”。这对我来说似乎很奇怪 - 您是否阅读了有关自定义日期和时间格式字符串的 MSDN 文档?
重要的是,您几乎可以肯定地使用不变的文化进行解析和格式化;通常,您会使用具有不变文化(或其他一些已知的固定文化)的自定义格式模式和具有用户文化的标准格式模式。
所以,你想要这样的东西:
var culture = CultureInfo.InvariantCulture;
DateTime parsed = DateTime.ParseExact(text, "MM/dd/yyyy", culture);
string formatted = parsed.ToString("yyyy-MM-dd", culture);
但是,我强烈DateTime
建议您尽可能长时间地保持该值。你肯定需要它作为一个字符串吗?你真的应该只在API边界处转换回字符串,你绝对被迫这样做,IMO。您添加的每次转化都是潜在的错误来源。
顺便说一句,如果您想使用一组更丰富的日期/时间类型,您可能需要考虑我的Noda Time库,您可以在其中将此值保留为 a LocalDate
,这表明它没有时间组件...
另请注意,如果这些是用户输入的可能无效的值,则应考虑DateTime.TryParseExact
改用。
您可以先解析它:
DateTime datetime = DateTime.Parse("01/01/2012");
如果您不使用英国语言环境,则需要添加:
DateTime datetime = DateTime.Parse("01/01/2012", new CultureInfo("en-GB"));
然后吐出来
string output = datetime.ToString("yyyy-MM-dd");
尝试DateTime.ParseExact(yourDateString, "MM/dd/yyyy", null).ToString("yyyy-MM-dd")
评论后编辑:
DateTime.ParseExact(yourDateString, @"MM\/dd\/yyyy", null).ToString("yyyy-MM-dd")
我忘记了斜线 ( /
) 在日期格式字符串中具有特殊含义。现在它已经逃脱了,这似乎有效。我尝试过这个。
但是,将其CultureInfo.InvariantCulture
用作“提供者”而不是当前的文化(这就是你得到的null
)更安全。这样人们就不必担心存在某种结果不同的异域文化。
DateReported.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
编辑:这是假设 DateReported 是 DateTime 类型的。
这是 MSDN 自定义格式字符串的链接; http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.71).aspx
现在,如果您可以构建自己的:
DateTime.Now.ToString("yyyy-MM-dd");
在你的情况下,如果你想打印出 DateReported 这将是:
Console.WriteLine(DateReported.ToString("yyyy-MM-dd"));
这肯定有效
string DateReported = DateTime.ParseExact(e.Attribute("hciIIDateReported"), "MM/dd/yyyy", null).ToString("yyyy-MM-dd");
如果您已经只有该字段,则字符串处理可能是最直接的方法:
string processDate(string inputDate) // inputdate is like "02/05/1995"
{
string [] fields = inputdate.Split('/');
return string.Format("{0}-{1}-{2}", fields[2], fields[0], fields[1]);
}
我认为这会奏效。如果您可以先将其转换为 DateTime,则其他一些答案也可以。