确保AddMonths无论何种文化都适用

时间:2012-11-14 09:40:09

标签: c# windows datetime

我在C#程序中有一个字符串格式的日期:“28/09/2012”。它也可能是“09/28/2012”格式。 我需要将此字符串转换为DateTime,然后在其上调用AddMonths(2)方法。 如何在具有任何cultureie.UK / US / Asia等的计算机上确保此代码正常运行?

2 个答案:

答案 0 :(得分:2)

DateTime.Parse应该有一个带有CultureInfo的重载。

您应该传递您选择的文化信息。安装在机器上的那个,或者是用户在您的应用程序选项或配置等中选择的那个。

拥有DateTime后,无论文化如何,AddMonths都应该有效。

很抱歉没有精确过载,我现在不在Visual Studio前面。

答案 1 :(得分:1)

如果您为AddMonths指定错误的文化,

DateTime.Parse不会失败。因此,您必须知道DtaeTime-String的文化或格式。否则,不可能知道“10/09/2012”是在9月还是10月(正如FrantišekŽiačik指出的那样)。

  

假设格式为“28/09/2012”,我该如何实现此功能

如果你知道inpout字符串总是采用“dd / MM / yyyy”格式,那么你可以使用DateTime.ParseExact并在之后将正确的文化应用到ToString

String input = "28/09/2012";
DateTime dt = DateTime.ParseExact(input, "dd/MM/yyyy", CultureInfo.InvariantCulture);
CultureInfo targetCulture = CultureInfo.CreateSpecificCulture("en-US");
String output = dt.AddMonths(2).ToString( targetCulture );

Demo here