我正在编写我网站的后端(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自己给出的日期。
答案 0 :(得分:1)
只需指定与PayPal为您提供的格式匹配的自定义DateTime
格式,并将其传递给TryParse
或TryParseExact
方法:
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。