C# 如何将字符串从PayPal';付款日期
我的网站从贝宝那里收到一些数据。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
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)改为code>来处理大于或小于三个字符的时区。