如何从inapp服务器响应日期获取等效的UTC日期时间?
问题描述:
我打电话给苹果的服务,以验证应用收据。以下是我打电话的服务。如何从inapp服务器响应日期获取等效的UTC日期时间?
try
{
_url = ConfigurationManager.AppSettings["AppleServerUrl"];
var json = new JObject(
new JProperty("receipt-data", receiptToken),
new JProperty("password", "mySecretKey")).ToString();
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] postBytes = Encoding.UTF8.GetBytes(json);
var request = System.Net.HttpWebRequest.Create(_url);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = postBytes.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(postBytes, 0, postBytes.Length);
stream.Flush();
}
var sendResponse = request.GetResponse();
string sendResponseText = "";
using (var sr = new StreamReader(sendResponse.GetResponseStream()))
{
sendResponseText = sr.ReadToEnd().Trim();
}
var resObj = (JObject)JsonConvert.DeserializeObject(sendResponseText.ToString());
var latestReceipt = resObj["latest_receipt"];
resObj = (JObject)resObj["latest_receipt_info"].LastOrDefault();
var expiryDate = Convert.ToDateTime(resObj["expires_date"]);
}
我得到expiryDate =“2017-05-03 15:08:55 Etc/GMT”;
现在我需要将此日期转换为日期时间(UTC)&保存到我的数据库。虽然试图做到这一点,我收到错误。
该字符串未被识别为有效的DateTime。有一个未知的字开始索引20
虽然谷歌搜索我得到了下面的链接&尝试链接中提到的东西。
-
The string was not recognized as a valid DateTime. There is an unknown word starting at index 0
变种expiryDate = DateTime.ParseExact( “YYYY-MM-DD HH:MM:SS:FFF”,resObj [ “expires_date”]的ToString(), CultureInfo.InvariantCulture) ;
这会引发下面的错误。
字符串未被识别为有效的DateTime。
如何将返回的日期转换为等效的UTC日期时间?
谢谢。
答
您可以通过删除"Etc"
来转换字符串值。有可能是一个更强大的方式,但这部作品在紧要关头
Parse(Regex.Replace("2017-05-03 15:08:55 etc/GMT", "[a-zA-Z]{3}/", ""))
这将产生
"2017-05-03 15:08:55 GMT"
这就是说,你绝对应该使用或者System.DateTimeOffset
或类似NodaTime。在处理时区感知数据时处理日期处理。