向Asp.net Ajax 传入DateTime类型后时间变化的问题

向Asp.net Ajax 传入DateTime类型后时间会变为零时区的时间,换句话说也就是比中国的时间少了8个小时。

例如:
自定义类型MyOrder
关于在Asp.net Ajax里面使用自定义类型请参考
使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型
C#
public class MyOrder()
{
    public MyOrder()
    {
    }
    
    private DateTime _OrderDateTime;

    public DateTime OrderDateTime
    {
        get
            { 
                return _OrderDateTime;
            }
        set
            {
                _OrderDateTime=value;
            }
      }
      …………其他略
}

JS

function()
{
    var order=new MyOrder();
    MyOrder.OrderDateTime=new Date();
    …………其他略
}

然后在WebService里面查看,传入后OrderDateTime少了8个小时。

如果直接以DateTime参数传入Sql写入数据库就变回了正常的时间。

最后发现是时区的问题。

解决方案是调用DateTime的ToLocalTime()方法。如果本地计算机时区设置正确,那么返回回来的时区也是正确的。
也查询过一些资料,也可以直接加上8个小时,不过传入的时间是带时区信息的。用ToLocalTime()好像更好些。另外我试着设置web.config将<globalization culture="zh-CN" enableClientBasedCulture="false"/>但并不起作用。

关于ToLocalTime

将当前 DateTime 对象的值转换为本地时间。

命名空间:System
程序集:mscorlib(在 mscorlib.dll 中)

语法

C#
public DateTime ToLocalTime ()

返回值
一个 DateTime 对象,其 Kind 属性为 ,并且其值为等效于当前 DateTime 对象的值的本地时间;如果经转换的值过大以至于不能由 DateTime 对象表示,则为 MaxValue,或者,如果经转换的值过小以至于不能表示为 DateTime 对象,则为 MinValue。

备注

本地时间等于 UTC 时间加上 UTC 偏移量。有关 UTC 偏移量的更多信息,请参见 TimeZone.GetUtcOffset。转换还要考虑应用于当前 DateTime 对象所表示的时间的夏时制规则。

从 .NET Framework 2.0 版开始,ToLocalTime 方法返回的值由当前 DateTime 对象的 Kind 属性确定。下表说明了可能的值。

Kind

结果

DateTime 的此实例被转换为本地时间。

Local

未执行任何转换。

假定 DateTime 的此实例为 UTC 时间,并且执行转换时将 Kind 视作 Utc

该转换返回的值为 Kind 属性总是返回 LocalDateTime。因此,即使 ToLocalTime 反复应用于同一个 DateTime,返回的仍然是有效结果。

此方法在进行计算时总是使用本地时区。


 

转载于:https://www.cnblogs.com/tishifu/archive/2007/08/20/862947.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值