付款日期为UTC

时间:2013-12-02 19:21:47

标签: c# asp.net paypal paypal-ipn

我正在编写我网站的后端(ASP.Net C#framework 4.0)。我正在使用我的PayPal IPN监听器来监听结果,该监听器将更新我的后端数据库。

付款时,我想记录付款日期。我在解析从IPN消息给我的payment_date参数时遇到问题。它看起来像这样:

args["payment_date"]: 10:23:05 Dec 02, 2013 PST

以下try-parse始终返回false:

DateTime paymentDate = DateTime.UtcNow;
DateTime.TryParse(args["payment_date"], out paymentDate);

PST代表太平洋标准时间对吗?我读到美国一些使用PST的州将在一年中的某个时刻转向PDT(太平洋夏令时)。

在我的数据库中,我想将所有DateTime存储为UTC。有没有办法可以让PayPal给我一个UTC支付日期?或者我是否必须编写自己的解析器?如果是这样,除了从PST切换到PDT之外还有什么我应该注意的吗?

也许您可能认为我应该使用自己的服务器时间来记录付款日期,但我认为最好在实际的IPN消息中使用PayPal自己给出的日期。

2 个答案:

答案 0 :(得分:1)

只需指定与PayPal为您提供的格式匹配的自定义DateTime格式,并将其传递给TryParseTryParseExact方法:

DateTime paymentDate = DateTime.UtcNow;
string format = "hh:mm:ss MMM dd, yyyy";
DateTime.TryParseExact(args["payment_date"], out paymentDate, format, CultureInfo.InvariantCulture);

请参阅:http://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx

在.NET中不支持解析时区速记,因此根据Patrick对我的回答的评论,请在此处查看解决方法:Parse DateTime with time zone of form PST/CEST/UTC/etc

答案 1 :(得分:1)

您也可以在此处查看:

How do I convert Paypal's HH:MM:SS DD Mmm(.) YYYY PST/PDT to a C# UTC DateTime?

但你的格式应该是HH:MM:SS DD Mmm(。)YYYY PST / PDT。