0

可能重复:
将日期格式从 dd/MM/yyyy 更改为 MM/dd/yyyy

我有一个字符串字段,其日期显示为 MM/DD/YYYY,但我需要它是 YYYY-MM-DD。

这是它的样子:

DateReported = (e.Attribute("hciIIDateReported")

我想也许我可以做一个 string.Format() 但我找不到只给出 YYYY-MM-DD 的自定义日期和时间格式字符串。我在那种格式中找到的那个是随时间一起来的,这是行不通的。有什么建议吗?

4

7 回答 7

2

根据 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改用。

于 2012-08-01T20:18:43.077 回答
1

您可以先解析它:

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");
于 2012-08-01T20:16:24.493 回答
1

尝试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)更安全。这样人们就不必担心存在某种结果不同的异域文化。

于 2012-08-01T20:16:59.363 回答
0
DateReported.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);

编辑:这是假设 DateReported 是 DateTime 类型的。

于 2012-08-01T20:13:18.663 回答
0

这是 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"));
于 2012-08-01T20:17:43.207 回答
0

这肯定有效

string DateReported = DateTime.ParseExact(e.Attribute("hciIIDateReported"), "MM/dd/yyyy", null).ToString("yyyy-MM-dd");
于 2012-08-01T20:38:48.240 回答
-3

如果您已经只有该字段,则字符串处理可能是最直接的方法:

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,则其他一些答案也可以。

于 2012-08-01T20:15:09.473 回答