在日期时间格式之间转换
本文关键字:之间 转换 格式 时间 日期 | 更新日期: 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.ParseExact
或DateTime.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
。您有string
s。这些格式化字符串不能属于任何区域性。当然,所有区域性都可能解析或生成具有相同格式的不同字符串表示,而不属于任何区域性。
我假设你有两个不同的字符串,它们的格式不同,你想解析输入,无论它来自哪一个。在这种情况下,可以使用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 .
希望有帮助