【发布时间】:2016-02-10 19:55:40
【问题描述】:
我一直在 Internet 上寻找有关在 .NET 中格式化时这个可选参数 CultureInfo.InvariantCulture 的信息
这些文章对此进行了解释:What does cultureinfo invariantculture mean,What is the invariant culture。但对我来说仍然不清楚。
我想管理一个日期时间变量并将其保存为这种格式“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"
【问题讨论】:
-
帮自己一个忙,不要将日期时间信息存储为字符数据。将其存储为日期或日期时间。
-
如果您只是为了构建 SQL 字符串而尝试进行转换,最好使用
SqlParameters -
@SeanLange 事实上,我们在 db 中使用一个 datime 列作为这个 datetime 值。但是,根据我们流程中的一些评估,我们将此值作为标识符保存在另一列中以用于商业目的。
-
YYYMMDD 不是将日期时间转换为字符串的正确格式字符串。 (yyyyMMdd) 并且使用这种格式,您不需要任何 CultureInfo,但请返回评论 #1
-
@batmaci 这个问题清楚地标有 sql server,它确实具有 datetime 数据类型。 sqlite 没有这一事实清楚地表明它是一种我会尽快逃避的技术。多么巨大的缺点。
标签: c# sql-server localization format cultureinfo