我正在编程我的网站的后端(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