我遇到了一个奇怪的问题。当服务器的Region and Language
设置为English (United States)
时,包含日期和时间的对象没有问题。但当我将其更改为我所在国家/地区的本地Dutch (Belgium)
时,我的一些PowerShell脚本出现了问题。
PowerShell中是否有需要设置的变量来解决这个问题?或者我必须在服务器上一直默认为英语日期格式吗?
例如,我们使用Don Jones提供的SQL module
来填充SQL数据库,当它被设置为荷兰语时,这一行会产生错误,但当它被设置为英语时不会:
if ($properties[$property] -eq 'datetime2') { [datetime]$prop = $result.GetDateTime($result.GetOrdinal($property)) }
我只需要Get-Date来获取日期,没有任何特殊的东西,当设置为Dutch (Belgium)
时,它会产生以下错误:
Exception calling "ExecuteNonQuery" with "0" argument(s): "Conversion failed when converting date and/or time from char
acter string."
我在为Excel工作表生成内容时遇到过同样的问题,它还抱怨日期时间格式。
3条答案
按热度按时间dy1byipe1#
对于将
DateTime
字段等信息导出到SQL,默认语言设置为English (United States)
。因此,当您的
Region and Language
设置与SQL的默认设置不同时,即:English (United States)
〈〉Dutch (Belgium)
,则应在代码中使用以下格式以符合英语默认值:另一个解决方案是更改SQL Express 2014中的默认输入语言:
1.右键单击服务器示例并选择
Properties > Advanced
1.将
Default language
更改为Dutch
(或您使用的内容)1.使用
Ok
确认1.仍在
SQL Management Studio
中,转到Security > Logins
(数据库下方)1.双击您的
user name
并选择下面的Dutch
作为Default language
1.重新启动
SQL Management Studio
,您应该可以开始了**结果:**当你在PowerShell代码中使用CmdLet
Get-Date
时,它将在将数据传输到SQL时按设计工作。SQL和Windows的系统语言仍为英语,但使用的格式为荷兰语。3lxsmp7m2#
我在SQL Server中的Datetime2中使用此函数。
返回类似这样的结果。
6mw9ycah3#
如果你已经使用过Don Jones的模块,你可能已经通过 *.types.ps1xml熟悉了类型扩展......如果我没记错的话,他的模块中也应该有一个。
添加以下类型声明时,
您基本上将System.DateTime的ToString()方法重写为标准SQL Server安装所需的格式。
这样,您就可以确保每次加载SQL模块时,日期的格式都是正确的。