CultureInfo.InvariantCulture和DateTime如何工作
在.NET中进行格式化时,我一直在Internet上查找有关此可选参数CultureInfo.InvariantCulture的信息
这些文章解释了这一点:cultureinfo不变文化意味着什么,什么是不变文化。 但对我来说还是不清楚。
我想管理和保存一个日期时间变量作为这种格式'yyyyMMdd',我把它格式化为这样:
DateTime localDateTime = DateTime.Today; //> 2016-02-10 12:33
string formattedDateTime = localDateTime.ToString("yyyyMMdd"); //> 20160210
假设在db中有一个长度为8的varchar列。但是在特定情况下它开始保存7个字符。 我在等待访问我们客户的域名来检查保存的格式。
但是,每个用户都可以设置系统中的文化(例如“en”,“es”,“fr”),所以即使方法ToString被强制格式化为“YYYYMMDD”,是否需要设置不变的文化? 如果没有,我可能有冒险让我的日期时间字符串与另一种格式? 数据库服务器中的区域配置是否重要?
这就是我现在正在尝试执行的操作,但不确定在我们签入测试后是否能解决问题:
DateTime localDateTime = DateTime.Today;
string formattedDateTime = localDateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture); //> 20160210
这是另一个范围,如果我需要从数据库构建我的变量并将其保存在存储过程中,我这样做:
CONVERT(varchar, getdate(), 112) --ISO for yyyymmdd
编辑:
我们做了一些测试:
DateTime currentDateTime = dateParameter; // 10/2/16 12:33 PM
string dateParameterAsString = dateParameter.ToString(); // "10/2/16 12:33 PM"
string formattedIdentifier = dateParameter.ToString(System.Globalization.CultureInfo.InvariantCulture); // "02/10/2016 12:33:00"
string formattedIdentifier2 = dateParamter.ToString("yyyyMMdd"); // "20160218"
string formattedIdentifier3 = dateParamter.ToString("yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture); // "20160218"
正如你在评论中提到的,你有一个日期时间字段,你将有一个字符表示。 在这种情况下,我建议你使用计算列并在数据库级别完成所有工作。
对于您的特定用例,将Culture明确指定为CultureInfo.InvariantCulture
并非绝对必要。
对于格式字符串"yyyyMMdd"
,所有组件将只输出整数字符,并且碰巧不受文化的影响。 使用CultureInfo.InvariantCulture
可能只是一个很小的性能改进(避免查找当前线程的文化),如果您想针对非常具体的信息开发,养成习惯并不是一件坏事。 这只会是一个问题,如果你使用"ddd"
或其他涉及月份,日期等的名称(或简单地使用不带参数的.ToString()
,这将使整个事情由当前线程文化)
也就是说,我们来看看另一个问题:你创建的字符串存储在你的数据库中。 为什么这是在这里完成而不是在表示层? 你没有使用参数化查询吗?
请请使用参数化查询。 请参阅如何以及为什么使用参数化查询
链接地址: http://www.djcxy.com/p/75105.html上一篇: How does CultureInfo.InvariantCulture and DateTime to String works