如何在asp.net中从TimeZone获取客户端本地日期?

时间:2013-05-06 07:34:50

标签: asp.net datetime timezone cultureinfo

我的数据库服务器位于美国。用户从INDIA进入日期必须存储客户端而不是服务器。但是,不幸的是服务器日期存储在数据库中。我只向用户显示仅在当天生成的当前日期的条目。 问题是当用户进入记录直到下午12:30(客户端计算机)正在向用户显示但在下午12:30(客户端计算机)之后,条目不会仅显示在12:30 PM之后的条目(客户端)机器)显示。任何想法?

例如:当客户机器日期是06/05/2013 11:57 AM时,显示在06/05/2013(DD / MM / YYYY)完成输入,直到下午12:30 但是当客户机日期是06/05/2013 12:57 PM时,不会显示输入的条目,但会显示在12:30 PM之后生成的条目。在上面的DB例如。创建日期存储为05/05/2013不知道为什么? 在.cs文件中:

public static DateTime GetIndianDate(DateTime dateTime)
        {
            return TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime, TimeZoneInfo.Local.Id,"India Standard Time").Date;

        }

仅显示今日的参赛作品:

shipments = BLL.GetShipmentsByUserIdNDate(userId, Classes.Common.GetIndianDate(DateTime.Now.Date));

public static List<Shipment> GetShipmentsByUserIdNDate(Guid userId, DateTime dateTime)
        {
            Entities db = new Entities();
            List<Shipment> shipments = (from s in db.Shipments
                                        where s.UserId == userId && s.CreatedDate == dateTime
                                        select s).ToList();
            return shipments;
        }

插入时:

shipment.CreatedDate = Classes.Common.GetIndianDate(DateTime.Now.Date);



public static DateTime GetIndianDate(DateTime dateTime)
        {
            return TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime, TimeZoneInfo.Local.Id,"India Standard Time").Date;

        }

那么,我将如何存储客户端机器的日期?现在它仍然只存储服务器日期。

帮助感谢!

1 个答案:

答案 0 :(得分:0)

嘿同样我推荐在保存记录时存储每个记录的UTC日期时间。

获取记录时,请获取时区并操纵UTC日期

Select getutcdate() --Get UTC Date

Select getdate()--Get Indain Standared Date

Select dateadd(minute,30,dateadd(hour,5,getutcdate())) --Get Indian offset +05:30  

如果您想从C#代码更新日期,请参阅此一个。但在这种情况下还需要UTC日期

string utcDateString = System.DateTime.UtcNow.ToString();

        DateTime localDate = DateTime.Parse(utcDateString,
                                  CultureInfo.CurrentCulture,
                                  DateTimeStyles.AssumeUniversal);

跳它帮助你。