【问题标题】:Payment Date as UTC付款日期为 UTC
【发布时间】:2013-12-18 14:58:16
【问题描述】:

我正在对我的网站的后端进行编程(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 自己提供的日期会更好。

【问题讨论】:

  • 很高兴找到@PatrickQuirk - 不知道为什么我在寻找它时没有出现。
  • 似乎很遗憾,我不能只要求 PayPal 给我 UTC 的付款日期。同样根据this answer PayPal 使用几种日期时间格式。多么不体谅他们。

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


【解决方案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

【讨论】:

  • .NET 不支持解析缩写,因此“K”格式化程序将不匹配。请参阅stackoverflow.com/questions/241789/… 了解丑陋的解决方法...
  • 既然 .NET 不支持时区速记,根据 Patrick 的链接,如何使用 .Replace("PST", "-07:00").Replace("PDT", "-08:00")(我得到正确的方法吗?)并将 zzz 添加到格式中?
  • 刚刚检查,PST 为 -08:00,PDT 为 -07:00。
  • 你可以,但是重复替换的成本太高了……每一个都需要你 O(n) 遍历字符串。
  • 感谢 David,目前我认为我的在线商店不必担心几个 Replace 方法的计算开销。无论如何,日期时间字符串相当短,因此不应该产生太大影响。如果它开始成为瓶颈,那么我将赚到很多钱,以至于我有能力付钱给别人为我做我的网站;-)
【解决方案2】:

您也可以在这里查看:

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 首先。

【讨论】:

    猜你喜欢
    • 2020-01-03
    • 2014-09-14
    • 1970-01-01
    • 2016-01-02
    • 2013-06-24
    • 2014-04-28
    • 2016-01-15
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多