获取本地日期时间,而不是服务器端代码中的服务器DateTime C#

问题描述:

我正在使用ASP MVC 4.5。我有意输入付款细节。当用户输入付款时,我使用C#获取当前时间。但是在将它托管在服务器上之后,我发现了一个热门错误。它会得到另一个dateTime(可能是我服务器的时间),而不是我用户的本地时间! 我想用C#获取用户的当前时间。我应该使用C#还是JavaScript? 我认为使用javascript很容易获得用户的时间。但是我想为此使用C#。你可以帮我吗? 我的网络API:获取本地日期时间,而不是服务器端代码中的服务器DateTime C#

// POST api/PaymentApi 
    public HttpResponseMessage PostPayment(Payment payment) 
    { 
     if (ModelState.IsValid) 
     { 
      var mem= db.Members.Where(m => m.MemberID.Equals(payment.MemberID)).FirstOrDefault(); 

      if (mem ==null) 
      { 
       return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); 
      } 


      payment.Date = DateTime.Now; 
      db.Payments.Add(payment); 
      db.SaveChanges(); 

      HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, payment); 
      response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = payment.PaymentID })); 
      return response; 
     } 
     else 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); 
     } 
    } 

我用payment.Date = DateTime.Now.ToLocalTime();也但不工作的!

许多在这里回答使用JavaScript日期。这就是我使用它的原因。但是,JavaScript发送日期时间,我的WebApi使它稍有不同。
的Javascript:Date:Tue Dec 27 2016 11:04:12 GMT+0600 (Local Standard Time) C#:Date:{27/12/2016 05:04:12} enter image description here

+1

你检查了文化吗? –

+1

在服务器*上运行*的任何.NET代码将只能看到*服务器时间*。你需要做的是在客户端上运行代码以获取那里的时间,然后将其发送到服务器。但是,是什么让你认为时间将与你的服务器有很大的不同?你确定你不想要UTC时间吗? –

+0

不,我只是想获得客户的时间谁将提交付款。 – Fawel

DateTime作品与本地主机的时钟,例如服务器。大多数支付系统将日期保存为UTC,以避免客户端/服务器时间差异。

payment.Date = DateTime.UtcNow; 
+0

理查德的结果是什么? – Fawel

如果客户端不是自己发送它,在服务器端不可能获得DateTime客户端。

有没有什么办法从服务器知道用户本地时间。您需要做的是将本地时间从客户端发送到UTC格式的请求中的服务器。

的Javascript(需要jQuery的):

var UTC = new Date().getTime(); 
+0

OP没有使用Javascript。 –

你需要可以在javascript本地日期时间,并将它传递给服务器。我建议你使用ISO8601格式。