2016-11-16 41 views
-1

我有一個web服務,我正在嘗試以下操作。在Web服務中選擇DateTime.Now

我想進入ProcessReqDate列DateTime.Now(如2016-11-16 14:32:37.733),但我得到這個(2016-11-17 00:00:00.000)。

if (!DateTime.TryParseExact(OrderReq.RequestedProcessDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateField) || 
    dateField < DateTime.Today || 
    order.PODate > dateField) 
{ 
    orderInfo.status = "Fail"; 
    orderInfo.order_number = orderNo; 
    orderInfo.notes = "Invalid Request Delivery Date: " + OrderReq.RequestedProcessDate + " (yyyy-MM-dd)" + Environment.NewLine; 
    orderFailed = true; 
} 
else 
{ 
    order.ProcessDate = DateTime.Today; 
} 

if (order.ProcessDate == DateTime.Today) 
{ 
    order.ProcessReqDate = DateTime.Now; 
} 
else 
{ 
    order.ProcessReqDate = DateTime.Today; 
} 
+0

你是否在使用DateTime?或其他一些數據類型? –

+0

你的問題是什麼?爲什麼你使用DateTime.Today,如果你想設置DaTime.Now? –

+0

然後解釋你的問題正確,它不是明確由代碼 –

回答

0

如果您稍微重寫一下代碼,那麼您可以更清楚地知道發生了什麼。它出現,如果沒有問題,您想要設置order.ProcessReqDateDateTime.Now,如果出現問題,則將其設置爲DateTime.Today

您還可以有用地給出失敗的原因,以便用戶更容易理解哪裏出了問題。

我不知道你展示的代碼的上下文,所以我只是把它放到void

using System; 
using System.Globalization; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public enum OrderInfoStatus 
     { 
      Failure = 0, 
      Success = 1 
     } 

     class OrderReq 
     { 
      public string RequestedProcessDate { get; set; } 
     } 

     class OrderInfo 
     { 
      public OrderInfoStatus Status { get; set; } 
      public string OrderNumber { get; set; } 
      public string Notes { get; set; } 
     } 

     class Order 
     { 
      public DateTime ProcessDate { get; set; } 
      public DateTime ProcessReqDate { get; set; } 
      public DateTime PODate { get; set; } 
     } 

     void X(OrderReq orderReq, Order order, OrderInfo orderInfo, string orderNo) 
     { 
      DateTime dateField; 
      bool isValidRequestedProcessDate = DateTime.TryParseExact(orderReq.RequestedProcessDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateField); 

      bool isGoodDate = true; 
      string problemArea = string.Empty; 

      if (!isValidRequestedProcessDate) 
      { 
       isGoodDate = false; 
       problemArea = "Could not parse requested process date."; 
      } 
      else if (dateField < DateTime.Today) 
      { 
       isGoodDate = false; 
       problemArea = "Requested process date is before today."; 
      } 
      else if (dateField > order.PODate) 
      { 
       isGoodDate = false; 
       problemArea = "Requested process date is after PO date."; 
      } 

      if (isGoodDate) 
      { 
       orderInfo.Status = OrderInfoStatus.Success; 
       orderInfo.OrderNumber = orderNo; 
       order.ProcessDate = DateTime.Now; 
      } 
      else 
      { 
       orderInfo.Status = OrderInfoStatus.Failure; 
       orderInfo.OrderNumber = orderNo; 
       orderInfo.Notes = "Invalid Request Delivery Date: " + 
        orderReq.RequestedProcessDate + 
        " (yyyy-MM-dd) - " + 
        problemArea + 
        Environment.NewLine; 
       order.ProcessReqDate = DateTime.Today; 
       //orderFailed = true; /* use orderInfo.Status for this instead */ 
      } 

     } 

     static void Main(string[] args) 
     { 
     } 
    } 
} 

這也將是使用UTC日期時間(例如DateTime.UtcNow.Date),而不是本地日期時間是個好主意。您始終可以將UTC日期時間轉換爲本地日期時間,但如果區域設置未知,則不可能做相反的處理。