2016-11-16 3 views
-1

Ich habe einen Web-Service und ich versuche, Folgendes zu haben.Auswahl von DateTime.Now in Web-Service

Ich möchte in ProcessReqDate Spalte DateTime.Now bekommen (wie 2016-11-16 14: 32: 37.733), aber stattdessen bekomme ich diese (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

Verwenden Sie DateTime überall? oder ein anderer Datentyp? –

+0

was ist deine Frage? Warum verwenden Sie DateTime.Today, wenn Sie DaTime.Now einstellen möchten? –

+0

Dann erklären Sie sich richtig in Frage, es ist nicht klar von Ihrem Code –

Antwort

0

Wenn Sie den Code ein wenig umschreiben, dann können Sie klarer machen, was geschehen soll. Es erscheint, die order.ProcessReqDate zu DateTime.Now gesetzt werden soll, wenn es kein Problem gibt, und setzen Sie es auf DateTime.Today, wenn es ein Problem gab.

Sie können auch einen Grund für den Fehler angeben, damit der Benutzer leichter nachvollziehen kann, was falsch gelaufen ist.

Ich habe keine Ahnung von dem Kontext des Codes, den Sie zeigten, also habe ich es einfach in eine 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) 
     { 
     } 
    } 
} 

Es wäre auch eine gute Idee sein UTC Datetimes zu verwenden (z DateTime.UtcNow.Date) anstelle von lokalen Datetimes. Sie können immer eine UTC-Datetime in die lokale Datetime umwandeln, aber wenn die Locale unbekannt ist, ist es unmöglich, das Gegenteil zu tun.