5

更新这看起来是 Windows 7 中的一个错误。我用 Windows 8 测试了相同的场景,但我无法在那里复制它。如果您想了解更多信息,请参阅我在此问题上发布的MS 错误报告。再次感谢所有提供帮助的人。

更新 2服务器 2008 R2 也发生错误(有点预期)

原始提交

使用下页日期格式中的示例,我可以控制我的日期格式。但是,我的一位客户使用 Windows 7 修改了他们的日历以显示他们的短日期,例如“ddd MM/dd/yy”,请参阅图片以了解设置。短日期格式.

这将像这样显示时钟在此处输入图像描述

这很好用,除非我在他们的机器上使用日期。当我像下面这样格式化日期时......

String.Format("{0:MM/dd/yy}", dt); //the result is 06 04 13, notice the spaces

如果我取消 ddd 以在日历设置中显示星期几并使用相同的格式选项,我会看到以下内容......

String.Format("{0:MM/dd/yy}", dt); //the result is 06/04/13, this time it has forward slashes

日期上的 .ToShortDateString() 选项给我“Tue 06/04/13”并在进入数据库时​​崩溃。这就是发现问题的方式。

除了对格式进行硬编码之外,即将月份加入正斜杠到当天等,有谁知道我还能尝试什么来让它工作?

4

4 回答 4

3

听起来您正在将日期格式化为字符串,以便通过一些 SQL 发送它。您是否考虑过为此使用命令参数而不是字符串格式?

于 2013-06-04T18:37:09.720 回答
2

编辑注意:这看起来是 Windows 7 的一个错误。通过控制面板更改短日期模式时,使用 OP 帖子中的“附加设置”选项卡,CurrentCulture 和 CurrentUICulture 的日期分隔符也会更改。

当您修改短日期格式时,看起来第一个非格式字符被选为当前区域性的日期分隔符。CurrentCulture 和 CUrrentUiCulture 都进行了修改,以反映 [意外] 自定义。看起来一些 [聪明的] 开发人员做出了 [无根据的] 假设,即没有人会拥有包含类似星期几的短日期格式。

不错的收获!你要向微软报告这个错误吗?

如果您使用不变的文化来格式化日期等,用户设置不会影响您。尝试类似的东西

String.Format( CultureInfo.InvariantCulture , "{0:MM/dd/yy}", dt);

或使用您想要的文化实例:

CultureInfo usa = CultureInfo.GetCultureINfo("en-US") ;
string.Format( usa , "{0:MM/dd/yy}" , dt ) ;

但是,如果您指定的文化与为 Windows 操作系统设置的当前文化相匹配,则会应用用户自定义:意思是,除非您使用不是当前 Windows 文化的文化,否则您将遇到同样的问题。

MDSN 上的更多详细信息:

在不指定特定文化的情况下,您将获得当前用户的CurrentCultureCurrentUICulture应用了任何用户指定的 mod。

于 2013-06-04T17:38:47.207 回答
2

使用 InvariantCulture 应该可以。我创建了一个测试控制台应用程序来检查它。该代码将线程的当前文化更改为不变的文化:

class Program
{
    static void Main(string[] args)
    {
            /// Displays '06 04 13'

        Console.WriteLine(string.Format("{0:MM/dd/yy}", System.DateTime.Now));

        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

            /// Displays '06/04/13'

        Console.WriteLine(string.Format("{0:MM/dd/yy}", System.DateTime.Now));

        Console.ReadLine();
    }
}
于 2013-06-04T18:00:25.227 回答
1

对于那些对这方面的更多信息感兴趣的人,请转到我在此处放置的 MS 论坛帖子。

于 2013-06-04T19:15:16.763 回答