DateTime.ParseExact вызывает следующую ошибку «Строка не была распознана как действительный DateTime» - PullRequest
0 голосов
/ 06 июня 2018

Я создаю консольное приложение для моей sharepoint.теперь у меня есть поле DateTime с именем «OrderLiveDeliveredDate», и я хочу добавить месяцы для него на основе другого значения поля с именем «CustomerOrderContractLengthmonth».

теперь формат даты «OrderLiveDeliveredDate» будет выглядеть следующим образом {15/06/2018 00:00:00},поэтому я написал следующую строку кода, чтобы преобразовать значение поля в DateTime, а затем добавить месяцы: -

DateTime expiryDate = DateTime.ParseExact(item["OrderLiveDeliveredDate"].ToString(), "dd/mm/yyyy", CultureInfo.InvariantCulture).AddMonths(int.Parse(  item["CustomerOrderContractLengthmonth"].ToString()));

, но это вызывает следующее исключение: -

String was not recognized as a valid DateTime.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

DateTime.ParseExact требует, чтобы ваша строка формата точно соответствовала.

Из документации

Преобразует указанное строковое представление даты и времени вего эквивалент DateTime с использованием указанного формата и информации о формате для конкретной культуры.Формат строкового представления должен точно соответствовать указанному формату.

(выделение мое.)

В вашем случае вы бы хотели "{dd/MM/yyyy HH:mm:ss}" какВаша строка формата, предполагая, что {15/06/2018 00:00:00} было фактическим значением, сохраненным в item["OrderLiveDeliveredDate"].Если фигурные скобки не являются членами строки, то "dd/MM/yyyy HH:mm:ss" должно работать нормально.

0 голосов
/ 06 июня 2018

Вы пробовали это?

DateTime expiryDate = DateTime.ParseExact("15/06/2018", "dd/MM/yyyy", CultureInfo.InvariantCulture).AddMonths(int.Parse("2"));

Я избавился от компонента времени из строки даты. Если вы должны использовать компонент времени, попробуйте следующее ...

DateTime expiryDate = DateTime.ParseExact("15/06/2018 00:00:00", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture).AddMonths(int.Parse("2"));

Rextester для быстрого тестирования - http://rextester.com/HYEU95556

Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Globalization;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {

            DateTime expiryDate = DateTime.ParseExact("15/06/2018", "dd/MM/yyyy", CultureInfo.InvariantCulture).AddMonths(int.Parse("2"));
            DateTime expiryDate2 = DateTime.ParseExact("15/06/2018 00:00:00", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture).AddMonths(int.Parse("2"));

            Console.WriteLine(expiryDate); //15.08.2018 00:00:00
            Console.WriteLine(expiryDate2); //15.08.2018 00:00:00
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...