Csharp/C#教程:在不同服务器上服务器的全局区域性不同时的DateTime问题分享


在不同服务器上服务器的全局区域性不同时的DateTime问题

我的网站托管在不同位置的多台服务器上

数据格式的文化到处都是不同的 – 我们在每个地方使用mm/dd/yyyy格式,但是如果某些服务器将文化设置为dd/mm/yyyy那么我们的网站会生成Datetimeexception。

您应该在将字符串转换为日期时指定要使用的文化。

您应该使用的文化取决于日期格式化的文化。 例如,如果您要解析的所有日期都格式化为斯洛伐克语

 String s = "24. 10. 2011"; 

然后你需要像在斯洛伐克(斯洛伐克)sk-SK )文化中那样解析字符串:

 //Bad: d = DateTime.Parse(s); //Good: d = DateTime.Parse(s, CultureInfo.CreateSpecificCulture("sk-SK")); //Slovak (Slovakia) 

如果您的日期都在Tajik(塔吉克斯坦西里尔文) ,那么您需要将其解析为tg-Cryl-Tj

 String s = "24.10.11" DateTime d = DateTime.Parse(s, CultureInfo.CreateSpecificCulture("tg-Cryl-Tj")); 

这导致了一个问题:您使用的日期格式是什么? 您不应该依赖服务器的语言环境设置,您应该决定您想要的格式。

 //Bad String s = d.ToString(); //Good String s = d.ToString(CultureInfo.CreateSpecificCulture("si-LK")); //Sinhala (Sri Lanka) //s = "2011-10-24 12:00:00 පෙ.ව." 

我怀疑你更喜欢用英语做所有事情。 但是你必须决定哪种英语变体:

我怀疑你更喜欢英语(印度)en-IA )。


但是,如果你真的无法决定在将日期转换为字符串时使用什么文化,反之亦然,并且日期永远不会向用户显示,那么你可以使用不变文化

 String s = "10/24/2011" //invariant culture formatted date d = DateTime.Parse(s, CultureInfo.InvariantCulture); //parse invariant culture date s = d.ToString(CultureInfo.InvariantCulture); //convert to invariant culture string 

永远不会将日期内部存储为字符串。 不在数据库中,不在您的应用程序中。

如果需要在服务器之间移动日期值,请转到二进制文件。 或者,如果您真的必须使用字符串,请使用ToString(CultureInfo.InvariantCulture) – 或者只是序列化Ticks属性。

此外,永远不要使用您使用代码构建的SQL命令将日期作为字符串传递给数据库。 使用SqlParameter ,甚至更好地依赖于某些O / R Mapper,例如Entity Framework或Linq to SQL。

如果部署到不受您控制的服务器,那么确保您的代码没有文化上的硬编码依赖是至关重要的。

您很可能希望在代码中搜索DateTime.Parse或类似内容。 我们在DateTime上有一组扩展方法,我们使用它来强制正确的文化。

永远不要依赖服务器的默认语言环境。 对于您的情况,这意味着:

上述就是C#学习教程:在不同服务器上服务器的全局区域性不同时的DateTime问题分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1024506.html

(0)
上一篇 2022年1月7日
下一篇 2022年1月7日

精彩推荐