如何创建不在当前文化中的 DateTime 对象
Posted
技术标签:
【中文标题】如何创建不在当前文化中的 DateTime 对象【英文标题】:How to create a DateTime object not in the current culture 【发布时间】:2010-07-29 18:57:27 【问题描述】:我真的在这个上画了一个空白。我一直致力于全球化,但 DateTime 似乎总是回归到 CurrentThread 的文化。我把它分解成更小的步骤,希望能找到我的问题,但它开始让我发疯。
我有一个以字符串形式表示日期的文本框:
// the CurrentThread's culture is de-DE
// My test browser is also set to de-DE
IFormatProvider culture = new System.Globalization.CultureInfo("de-DE",
true);
// en-US culture, what I'd ultimately like to see the DateTime in
IFormatProvider us_culture = new System.Globalization.CultureInfo("en-US",
true);
// correctly reads the textbox value (22.7.2010 into a datetime)
DateTime dt= DateTime.Parse(txtStartDate.Text, culture,
System.Globalization.DateTimeStyles.NoCurrentDateDefault);
// correctly produces a string 7/22/2010
string dt2 = dt.ToString(us_culture);
此时我想要一个位于 en-US 的 DateTime 我都试过了:
DateTime dt3 = Convert.ToDateTime(dt2, us_culture);
DateTime dt3 = DateTime.Parse(dt2, us_culture);
但两者都产生 de-DE DateTimes。我提出这个问题的动机是其余的业务逻辑将调用 dt2.toString() 并将导致不正确的日期时间字符串。我意识到我可以将 toString() 更改为 toString(us_culture) 但我宁愿不更改所有其余的业务逻辑来适应这种变化。
有没有办法在 CurrentThread 的文化之外的文化中获取 DateTime?
感谢您的宝贵时间,我已经为此苦苦挣扎了太久了。
【问题讨论】:
我不完全理解。你想要一个不同的 DateTime 值,还是字符串返回不正确(如果我只是很密集,请道歉)。无论文化如何,DateTime 都是 DateTime。唯一会改变的是字符串表示。 【参考方案1】:DateTime 对象就是这样 - 一个日期/时间,它与文化无关。如果这是您所追求的,则需要使用特定文化来格式化日期。
【讨论】:
感谢您的回复。你是对的,我认为我的问题本身有些混乱。我正在尝试修复 toString() 调用的格式,所以我真的需要更多地考虑我的问题。 我的荣幸。如果您使用的是 .Net 3.0+,您可以按照 DateTime.toAmericanString() 的行创建一个“扩展方法”,以防止您在代码中乱扔格式字符串。【参考方案2】:ToString() 的参数less 重载将始终根据CurrentCulture 设置输出日期。这就是你想要的 100 的 99 倍。
如果您不想使用重载,可以手动将 CurrentThread.CurrentCulture 设置为您想要的。
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
但请理解,这将改变您应用程序中的所有内容。
【讨论】:
"...对于您应用程序中该线程中的所有内容..." 是的,我想得越多,我就越意识到我的问题很困惑。你是对的,我想我只需要修改我所有的 toString() 调用。也许我可以在业务逻辑部分之前设置 CurrentCulture,然后在返回时恢复它?我想知道如果我走那条路,我是否会陷入痛苦的世界,但我可能会尝试一下。感谢您的意见。【参考方案3】:尝试使用自定义数据格式:
string dt2 = dt.ToString("m/d/yyyy");
【讨论】:
以上是关于如何创建不在当前文化中的 DateTime 对象的主要内容,如果未能解决你的问题,请参考以下文章
.NET 4.5 DateTime 格式/转换错误与上索布文化
C# - 如何在不改变 DateTime 格式的情况下改变文化