2016-11-16 19 views
-1

私はWebサービスを持っており、次のようなことをしようとしています。WebサービスでのDateTime.Nowの選択

(2016-11-16 14:32:37.733のように)ProcessReqDate列DateTime.Nowを取得したいのですが、代わりにこれを取得します(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

あなたの質問は何ですか?なぜあなたはDaTime.Nowを設定する場合は、DateTime.Todayを使用していますか? ProcessReqDateがDateTime.Now その後、 ProcessDate = DateTime.Now(日付+時間) 他 ProcessDate = DateTimeのであれば : –

+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の日時は常にローカルの日時に変換できますが、ロケールが不明な場合はその逆を行うことはできません。

関連する問題