Как преобразовать строку в дату и время из PayPal's payment_date - PullRequest
0 голосов
/ 18 января 2019

Мой сайт получает данные от PayPal. PayPal предоставляет строку для представления даты и времени

10:52:32 Jan 17, 2019 PST

Поскольку это строка, я понимаю, что могу вручную разбить ее, разделив пробел, запятую и двоеточие. Затем я могу создать объект DateTime на основе того, что было разделено

Прежде чем я попытаюсь это сделать, у меня есть вопросы: может ли это быть сделано "автоматически" платформой?

Мои усилия предполагают, что нет

DateTime.Parse("10:52:32 Jan 17, 2019 PST");   //System.FormatException: 'The string was not recognized as a valid DateTime. There is an unknown word starting at index NN.'

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Для этой цели вы можете использовать метод DateTime ParseExact:

var dateTimeString = "10:52:32 Jan 17, 2019 PST";
var dateTime = DateTime.ParseExact(dateTimeString.Substring(0, dateTimeString.LastIndexOf(" ")), "HH:mm:ss MMM dd, yyyy", CultureInfo.InvariantCulture);

К сожалению, среда плохо поддерживает часовые пояса.Вам нужно будет создать словарь часовых поясов, сопоставить их с соответствующим смещением времени и вручную добавить его в результирующий объект DateTime.

Вот один из способов сделать это: https://stackoverflow.com/a/30303587/633098.

0 голосов
/ 18 января 2019

Вы можете использовать DateTime.ParseExact для анализа строки.

Если вы всегда знаете часовой пояс, вы можете использовать следующие

var paypalDateTime = DateTime.ParseExact("10:52:32 Jan 17, 2019 PST", "HH:mm:ss MMM dd, yyyy PST", CultureInfo.InvariantCulture);
Console.WriteLine(paypalDateTime.ToString());
// Output: 1/17/2019 10:52:32

Если вы хотите

    var inputDates = new [] { 
        "10:52:32 Jan 17, 2019 PST",
        "10:52:32 Jan 17, 2019 GMT",
        "10:52:32 Jan 17, 2019 UT",
        "10:52:32 Jan 17, 2019 NZST"
    };

    foreach (var inputDate in inputDates) 
    {
        var timeZone = inputDate.Substring(inputDate.LastIndexOf(" ") + 1);  
        var paypalDateTime = DateTime.ParseExact(inputDate.Substring(0, inputDate.LastIndexOf(" ")), "HH:mm:ss MMM dd, yyyy", CultureInfo.InvariantCulture);
        // Here you can handle the timezone
        Console.WriteLine(paypalDateTime.ToString() + " in timezone " + timeZone);
    }

Выходы

1/17/2019 10:52:32 AM in timezone PST
1/17/2019 10:52:32 AM in timezone GMT
1/17/2019 10:52:32 AM in timezone UT
1/17/2019 10:52:32 AM in timezone NZST
...