c# – 支付日期为UTC

我正在编程我的网站的后端(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(太平洋夏令时).

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

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

最佳答案 只需指定一个与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

点赞