如何将字符串从 PayPal payment_date 转换为日期时间

How to convert string to Date Time from PayPal's payment_date

我的网站从 PayPal 接收一些数据。 PayPal 提供了一个字符串来表示日期时间

10:52:32 Jan 17, 2019 PST

因为它是一个字符串,我知道我可以通过白色 space、逗号和冒号来手动拆分它。然后我可以根据已拆分的内容创建 DateTime 对象

在我尝试之前,我的问题是,这可以由框架完成 "automatically" 吗?

我的努力表明没有

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.'

您可以使用 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

您可以使用 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 对象中。

这是一种方法:。