Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字符串从PayPal';付款日期_C#_Paypal_.net 4.6 - Fatal编程技术网

C# 如何将字符串从PayPal';付款日期

C# 如何将字符串从PayPal';付款日期,c#,paypal,.net-4.6,C#,Paypal,.net 4.6,我的网站从贝宝那里收到一些数据。PayPal提供了一个字符串来表示日期和时间 10:52:32 Jan 17, 2019 PST 因为它是一个字符串,我知道我可以通过空格、逗号和冒号来手动分解它。然后,我可以根据拆分的内容创建DateTime对象 在我尝试之前,我的问题是,这个框架可以“自动”完成吗 我的努力表明没有 DateTime.Parse("10:52:32 Jan 17, 2019 PST"); //System.FormatException: 'The string was

我的网站从贝宝那里收到一些数据。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.'
您可以使用解析字符串

如果您始终知道时区,则可以使用以下命令

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对象中


这里有一种方法:。

您的解决方案假设时区始终为PST,但情况可能并非如此。看到我的答案了。很好@silkfire我已经更新了解决方案来处理多个时区。可能的重复。您确定PayPal不会以更好的格式(ISO/yyyy-mm-dd…)返回付款日期吗?@i486。所以不,我不确定,因为我目前正在测试他们的IPN模拟器,但我希望模拟器的结构与真正的IPN相同,使解析精确
DateTime.ParseExact(inputDate.Substring(0,inputDate.LastIndexOf(“”),“HH:mm:ss MMM dd,yyyy”,CultureInfo.InvariantCulture)来处理大于或小于三个字符的时区。