【发布时间】:2015-09-17 08:14:04
【问题描述】:
我有一段代码在使用 json 日期参数时给了我一个意外的输出。 (这一点已被注意到,因为该软件正在与创建它的时区不同的时区中使用)
html 是一个基本的 jquery datepicker 字段,所以没有错。我只是想将所选日期与数据库中的日期相匹配。
进入 WebMethod FindDuplicates 的 JSON 日期时间格式正确
2015-09-17T00:00:00.000Z
调用webservice的javascript很简单:
findDuplicates : function(options, success, error) {
if(''+options.name == '' && ''+options.dateToCompare == '') {
success&&success([], 'success', null);
return;
}
return $software.__call_ajaxws('/webservices/FindDuplicates', { nameToMatch: options.name || null, dateToCompare: options.dateToCompare }, null, success || void (0), error || void (0), { elContent: 'Searching for duplicate records' });
}
在这个(无效的)代码中,变量dateToCompare
<WebMethod(), ScriptMethod(ResponseFormat:=ResponseFormat.Json), PrincipalPermission(SecurityAction.Demand, Authenticated:=True)> _
Public Function FindDuplicates(ByVal nameToMatch As String, ByVal dateToCompare As Nullable(Of DateTime))
Dim someValue as String = "Foo"
在Dim someValue as String = "Foo"这一点上,dateToCompare 的值变成了2015-09-17 09:00:00
而如果我将dateToCompare 的类型更改为字符串,它会正确显示为2015-09-17 00:00:00
由于某种原因我无法解决,当将参数转换/转换为 DateTime 时,它决定将服务器的时区添加到日期,从而向比较函数发送不正确的日期,这意味着 DB 存储了 @ 的值987654332@ 永远不会比较,因为它正在与 2015-09-17 09:00:00 进行比较
有没有什么办法可以停止字符串到日期时间的转换过程,添加服务器的时区?
【问题讨论】:
-
@varocarbas 在函数 FindDuplicates dateToCompare 的第一行中,当它转换为 DateTime 类型时,它的时区已经添加到其中
-
如果您在 .NET 3.5 中使用 ASP.NET AJAX,我认为自动使用的 JSON 序列化程序是
JavaScriptSerializer,而不是 Json.NET。来源:techblog.dorogin.com/2012/05/…。您如何配置/设置 JSON 序列化程序? -
您应该指定相应转换为
DateTime的条件(通过序列化程序,如dbc 建议的那样,或通过任何其他方式)。我删除了我以前的 cmets,因为不完全确定它在这里的实际适用性。在任何情况下,提供的代码(即仅包括dateToCompare As Nullable(Of DateTime)和输入字符串)都不足以理解问题。必须执行从字符串到DateTime的转换(在非常糟糕的情况下,它可能会通过Option Strict Off隐式执行)并且应该突出显示这部分。
标签: json vb.net datetime .net-3.5 json.net