在日期时间格式之间转换

本文关键字:之间 转换 格式 时间 日期 | 更新日期: 2023-09-27 18:26:12

我面临一个问题,需要将给定输入格式的日期转换为目标格式。在C#中有什么标准的方法可以做到这一点吗?

例如,我们将yyyy.MM.dd作为源格式,目标格式为MM/dd/yyy(当前区域性)。

这个问题是因为我使用的解析策略优先考虑当前区域性,如果失败,它会尝试从已知格式列表中进行解析。现在假设我们有两个等效的日期,一个在上面的源区域性(2015.12.9)中,另一个在当前区域性(9/12/2015)中。然后,如果我们试图分析这两个日期,第一种情况下的月份将是12,第二种情况下将是9,所以我们有不一致性(它们应该意味着是相同的确切日期)。

我相信,如果存在的话,它应该是

DateTime.Convert(2015.12.9, 'yyyy/MM/dd', CultureInfo.CurrentCulture). 

有什么想法吗?

编辑:

感谢大家的想法和建议,但你们大多数人对我的问题的解释并不完全正确。你们大多数人的回答是以给定的格式进行直接解析,然后转换为CurrentCulture。

DateTime.ParseExact("2015.12.9", "yyyy.MM.dd", CultureInfo.CurrentCulture)

尽管它是CurrentCulture格式的,但它仍然会以12为月返回。因此,我的问题是,是否有任何标准的方法可以将yyyy.MM.d中的日期转换为MM/dd/yyy格式,以便月份现在位于正确的位置,并且THEN在目标区域性中对其进行解析。这种功能很可能是不存在的。

在日期时间格式之间转换

DateTime.ParseExact是您要查找的:

DateTime parsedDate = DateTime.ParseExact("2015.12.9", "yyyy.MM.d", CultureInfo.InvariantCulture);

如果您对输入字符串没有信心,则可以选择DateTime.TryParseExact。

我知道已经晚了,但如果你允许的话,我会尽量深入解释

我遇到了一个问题,需要以任何格式转换日期到目标。

不存在任何格式的日期DateTime没有任何隐式格式。它只有日期和时间值。看起来您有一个格式为日期的string,并且您想用不同的格式转换另一个string

在C#中有什么标准的方法可以做到这一点吗?

是的。您可以先用DateTime.ParseExactDateTime.TryParseExact将特定格式的string解析为DateTime,然后用不同的格式生成它的string表示。

举个例子,我们有yyyy。MM.dd作为源格式目标格式为MM/dd/yyy(当前区域性)。

我不明白当前文化在这句话中的含义,我想你想要yyyy而不是yyy,但你可以像我上面描述的那样生成它;

string source = "2015.12.9";
DateTime dt = DateTime.ParseExact(source, "yyyy.MM.d", CultureInfo.InvariantCulture);
string target = dt.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture); // 12/09/201

由于我使用的解析策略当前区域性的优先级,如果失败,则尝试解析从已知格式列表中选择。

由于您没有向显示任何解析策略,并且.NET Framework中也没有DateTime.Convert方法,因此我无法发表任何评论。

现在假设我们有两个等价的日期,一个在上面的源文化中(2015.12.9)和当前文化中的另一个(9/12/2015)。那么如果我们试图分析这两个日期,月份将是12第二个将是9,所以我们有一个不一致。

再次。。您没有DateTime。您strings。这些格式化字符串不能属于任何区域性。当然,所有区域性都可能解析或生成具有相同格式的不同字符串表示,而不属于任何区域性。

我假设你有两个不同的字符串,它们的格式不同,你想解析输入,无论它来自哪一个。在这种情况下,可以使用DateTime.TryParseExact重载,该重载将所有可能格式的字符串数组作为参数。然后使用MM/dd/yyy格式和具有/作为DateSeparator(类似于InvariantCulture)的区域性生成它的字符串表示。

string s = "2015.12.9"; // or 9/12/2015
string[] formats = { "yyyy.MM.d", "d/MM/yyyy" };
DateTime dt;
if (DateTime.TryParseExact(s, formats, CultureInfo.InvariantCulture,
                           DateTimeStyles.None, out dt))
{
    Console.WriteLine(dt.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture));
}

最简单、最好的方法是使用.ToString()方法
请参阅此代码:

DateTime x =DateTime.Now;  

要转换这个就这样写:

x.ToString("yyyyMMdd")//20151210
x.ToString("yyyy/MM/dd)//2015/12/10
x.ToString("yyyy/MMM/dd)//2015/DEC/10  //Careful About M type should be capital for month .  

希望有帮助