C# 日期格式和区域设置
英国设置:1/7/2011(2011 年 7 月 1 日)。在 Excel 中格式化时,我使用“MMM-yy”,预期:Jul-11,但它给了我“Jan-11”
我的代码:
newDataRange.SetValue("Value2", arr); //arr = "01/07/2011 00:00:00.000"
newDataRange.SetValue("NumberFormat", "MMM-yy");
public static void SetValue(this Range range, string propertyName, object value)
{
var excelCulture = new CultureInfo(1033);
var args = new object[1];
args[0] = value;
range.GetType().InvokeMember(propertyName,
BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance, null, range, args, excelCulture);
}
我很困惑。任何人都知道如何解决这个问题 谢谢
UK settings: 1/7/2011 (July 1, 2011). When formatted in Excel, I use "MMM-yy", expected: Jul-11, but it gives me "Jan-11"
My code:
newDataRange.SetValue("Value2", arr); //arr = "01/07/2011 00:00:00.000"
newDataRange.SetValue("NumberFormat", "MMM-yy");
public static void SetValue(this Range range, string propertyName, object value)
{
var excelCulture = new CultureInfo(1033);
var args = new object[1];
args[0] = value;
range.GetType().InvokeMember(propertyName,
BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance, null, range, args, excelCulture);
}
I am confused. Anyone knows how to solve this
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当您想要 dd/mm/yyyy 时,您使用的区域性似乎具有 mm/dd/yyyy 的日期格式。因此,您的转换使用
1/7/2011
中的1
作为月份,而不是7
。将区域性更改为 dd/mm/yyyy 格式的区域性应该可以解决您的问题。
编辑
正如我怀疑的那样,LCID 1033 ( 0x0409) 是 en-US,而不是 en-GB。 en-GB 为 2057 (0x0809)。您应该使用区域设置名称来避免将来出现此问题,即:
new CultureInfo("en-GB");
It looks like the culture you are using has a date format of mm/dd/yyyy when you want dd/mm/yyyy. Thus, your conversion is using
1
from1/7/2011
as the month instead of the7
.Changing the culture to one which has a format of dd/mm/yyyy should fix your problem.
EDIT
As I suspected, LCID 1033 (0x0409) is en-US, not en-GB. en-GB is 2057 (0x0809). You should use the locale name to avoid this problem in the future, vis:
new CultureInfo("en-GB");
这显然不是英国设置 - 日期 1/7/2011 在美国日期格式中将显示为 2011 年 1 月
It's clearly not UK settings - the date 1/7/2011 would show up as Jan 2011 in US date format