我正在对我网站的后端进行编程(ASP.Net C# 框架 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 自己给出的日期会更好。
最佳答案
只需指定一个自定义的 DateTime
格式来匹配 PayPal 给你的格式,并将其传递给 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
关于c# - 付款日期为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20336135/