9

datetimePayPalは次のような支払いを送信します。

09%3A37%3A22+11月+18%2C+2012+PST

このコードで変換しようとしましたが、例外が発生しました。

それを解析する方法についての手がかりはありますか?

ありがとうございました!

DateTime paymentDate;
DateTime.TryParse(WebUtility.HtmlDecode(r["payment_date"]), out paymentDate);
n.PaymentDate = paymentDate; // payment_date=09%3A37%3A22+Nov+18%2C+2012+PST
4

2 に答える 2

14

PayPal のドキュメントには、さまざまな日時形式があります。このメソッドを使用して解析し、UTC に変換します。

/// <summary>
/// Tries to parse PayPal formatted date and time and converts it to an UTC.
/// </summary>
public static bool TryParsePaypalDatetimeToUtc(this string paypalDatetime, out DateTime retValue)
{
    DateTime paymentDate;

    // PayPal formats from docs
    string[] formats = new string[] { "HH:mm:ss dd MMM yyyy PDT", "HH:mm:ss dd MMM yyyy PST", 
                                      "HH:mm:ss dd MMM, yyyy PST", "HH:mm:ss dd MMM, yyyy PDT", 
                                      "HH:mm:ss MMM dd, yyyy PST", "HH:mm:ss MMM dd, yyyy PDT" };
    if (false == DateTime.TryParseExact(paypalDatetime, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out paymentDate))
    {
        retValue = DateTime.MinValue;
        return false;
    }

    retValue = TimeZoneInfo.ConvertTimeToUtc(paymentDate, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));

    return true;
}
于 2013-09-25T12:16:58.457 に答える
11

これでうまくいくはずです:

DateTime paymentDate;
DateTime.TryParseExact(HttpUtility.UrlDecode(r["payment_date"]),
    "HH:mm:ss MMM dd, yyyy PST", CultureInfo.InvariantCulture,
    DateTimeStyles.None, out paymentDate);
于 2012-11-18T23:12:35.037 に答える