Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C夏普日期时间格式_C#_Date_Datetime_String Formatting - Fatal编程技术网

C# C夏普日期时间格式

C# C夏普日期时间格式,c#,date,datetime,string-formatting,C#,Date,Datetime,String Formatting,更新这似乎是Windows 7中的一个错误。我在Windows8上测试了相同的场景,但我无法在那里复制。如果您想了解更多信息,请参阅我在此问题上发布的。再次感谢您对我们的帮助 更新2该错误也发生在服务器2008 R2上(有点出乎意料) 原始提交文件 使用下一页上的示例,我能够控制日期的格式。但是,我的一个客户使用Windows 7修改了他们的日历以显示他们的短日期,如“ddd MM/dd/yy”,有关设置,请参见图片 这样显示时钟 除非我在他们的机器上使用日期,否则这很好用。当我像下面这样格式化

更新这似乎是Windows 7中的一个错误。我在Windows8上测试了相同的场景,但我无法在那里复制。如果您想了解更多信息,请参阅我在此问题上发布的。再次感谢您对我们的帮助

更新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
String.Format("{0:MM/dd/yy}", dt); //the result is 06/04/13, this time it has forward slashes
如果我取下ddd在日历设置中显示星期几,并使用相同的格式选项,我会看到以下内容

String.Format("{0:MM/dd/yy}", dt); //the result is 06 04 13, notice the spaces
String.Format("{0:MM/dd/yy}", dt); //the result is 06/04/13, this time it has forward slashes
日期上的.ToShortDateString()选项显示“Tue 06/04/13”,并在进入数据库时崩溃。问题就是这样被发现的


除了对格式进行硬编码,例如将月份与日的正斜杠连接等,还有人知道我还可以尝试做些什么吗?

编辑说明:这似乎是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的更多详细信息:


在不指定特定区域性的情况下,您将获得当前用户的
CurrentCulture
CurrentUICulture
,并对其应用任何用户指定的MOD。

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

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();
    }
}

听起来好像您正在将日期格式化为字符串,以便通过某种SQL将其发送进来。您考虑过使用命令参数而不是字符串格式吗?

对于那些对此感兴趣的人,请转到我发布的MS论坛帖子。

听起来您是在将日期格式化为字符串,以便通过一些SQL发送。你考虑过用命令参数来代替字符串格式吗?迈克尔的评论是+1。除非文本表示是你的最终目标,否则你应该避免字符串转换。它确实有一个刚刚传入的sql字符串。我希望避免转换为命令参数,并等待将其转换为EF。这听起来确实是个好主意。“我试试看。”迈克尔·冈特——你的建议奏效了。如果你把它作为一个答案,我会把它标记为解决方案。谢谢你的评论,不幸的是,文化格式也没有解决这个问题。我原以为这也是解决方案,但我认为ddd后设置中的空格将分隔符踢入了一个空格(有点像在欧洲他们使用的分隔符)。它确实格式正确,但空格仍然出现。@Gouber80。有趣。我不得不称之为Windows7错误。见我修正后的答案。如果您使用不变量文化(刚刚选中),问题不会自行显现。我同意应该用CurrentCulture修复它-如果您从crash中看到答案,他还注意到它没有显示在不变量文化中。我想我会把这个放到Win7论坛上。我已经有一段时间没有发现可能存在windows问题;)。我做了一个测试,它的工作。我投了更高的票,因为你回答了我的要求,因为迈克尔的评论最终是一个更合适的解决方案,我在等着看他是否会把它作为一个答案。我会让他等到明天。然后我会把你的标记为答案。顺便说一句,这看起来完全像微软的bug。即使Windows中的短日期格式设置为“ddd MM/dd/yy”,日期也应以斜杠显示。我将WIndows设置保留为“ddd MM/dd/yyyyy”,因为它在WIndows任务栏中看起来不错。但我注意到Outlook显示的日期没有斜杠(与您的问题相同)。也许您应该向Microsoft报告。是的,其他人也提到了这一点。请查看我的答案中的链接,如果您对以下内容感兴趣,我将其发布到MS论坛。这是一个.Net错误,您可以在此处报告: