当前位置: 首页 > 编程语言 > C#

如何将Paypal的HH-MM-SSDDMmm(.)YYYYPST-PDT转换为C#UTCDateTime?

时间:2023-04-11 01:40:51 C#

如何将Paypal的HH:MM:SSDDMmm(.)YYYYPST/PDT转换为C#UTCDateTime?我想在SQLServer数据库中以这种格式记录payment_date。更新。直觉是对的。在这里找到了一个解决方案:http://www.codeillustrator.com/2010/03/converting-paypal-paymentdate-to-net.html,验证......当然,如果贝宝搬出西海岸,我会有麻烦了。有没有更好的方法来解析它?也许与时区?publicstaticDateTimeConvertPayPalDateTime(stringpayPalDateTime){//接受一些不同的日期格式,因为PST/PDT时区和沙盒与产品中的细微月份差异。string[]dateFormats={"HH:mm:ssMMMdd,yyyyPST","HH:mm:ssMMM.dd,yyyyPST","HH:mm:ssMMMdd,yyyyPDT","HH:mm:ssMMM.dd,yyyyPDT"};日期时间输出日期时间;DateTime.TryParseExact(payPalDateTime,dateFormats,newCultureInfo("en-US"),DateTimeStyles.None,outoutputDateTime);//转换为本地时区outputDateTime=outputDateTime.AddHours(3);返回输出日期时间;等等,上面的代码对我来说是完全错误的。我在西海岸!理想情况下,这应该被更新以将日期发送到正确的UTCDateTime并处理任何时区。此外,上面的代码不能正确处理PDT(如果转换为UTC)。更新2。显然,至少在以前的版本中,沙盒将返回“二月”。而场景又回到了“二月”。哈哈。有人救了我!更新3。链接到正则表达式版本http://www.ifinity.com.au/Blog/EntryId/77/Converting-PayPal-Dates-to-Net-DateTime-using-Regex,但调试可能是个问题。正则表达式似乎不是正确的方法。一定会有更好的办法。//////将PayPal日期字符串转换为有效的.net日期时间值//////包含PayPal日期的字符串///本地///时间距UTC/GMT的小时数(即,计算机所在的时区)///如果成功则为有效的DateTime值,如果不成功则为DateTime.MinDate日期:Mmmddyyyy*时区:PST/PDT*/conststringpayPalDateRegex=@"(?d{1,2}:d{2}:d{2})s(?(?[A-Za-z.]{3,5})s(?d{1,2}),?s(?d{4}))s(?[AZ]{0,3})";//!important:上面的行分为两行以进行格式化-在代码编辑器中重新加入//example05:49:56Oct.18,2009PDT//20:48:22Dec25,2009PSTMatchdateMatch=Regex.Match(rawPayPalDate,payPalDateRegex,RegexOptions.IgnoreCase);DateTime时间,date=DateTime.MinValue;//检查正则表达式模式是否匹配提供的字符串if(dateMatch.Success){//extr从正则表达式匹配组中执行日期的相关部分stringrawDate=dateMatch.Groups["date"].Value;stringrawTime=dateMatch.Groups["time"].Value;stringtz=dateMatch.Groups["tz"].Value;//创建日期和时间值if(DateTime.TryParse(rawTime,outtime)&&DateTime.TryParse(rawDate,outdate)){//将时间添加到日期值以获得日期时间值date=date.Add(新的时间跨度(时间。小时,时间。分钟,时间。秒));//调整pdt时区。将0传递给localUtcOffset以获得UTC/GMTintoffset=localUtcOffset+7;//pdt=utc-7,pst=utc-8if(tz=="PDT")//太平洋夏令时date=date.AddHours(offset);else//太平洋标准时间date=date.AddHours(offset+1);}}归期;}我从2006年开始没有做任何C#,所以这段代码可能无法编译在飞行前测试它!publicstaticDateTimeConvertPayPalDateTime(stringpayPalDateTime){//获取偏移量。//如果C#支持在字符串上切换,那么这样做可能更明智。整数偏移量;如果(payPalDateTime.EndsWith("PDT")){offset=7;}elseif(payPalDateTime.EndsWith("PST")){offset=8;}else{抛出异常;}//我们已经“解析”了时区,因此将其从字符串中删除。payPalDatetime=payPalDateTime.Substring(0,payPalDateTime.Length-4);//与上述格式相同,但删除了PST/PDT。string[]dateFormats={"HH:mm:ssMMMdd,yyyy","HH:mm:ssMMM.dd,yyyy"};//解析日期。如果失败则抛出异常。DateTimeret=DateTime.ParseExact(payPalDateTime,dateFormats,newCultureInfo("en-US"),DateTimeStyles.None,outoutputDateTime);//添加偏移量,并使其成为通用时间。返回ret.AddHours(offset).SpecifyKind(DateTimeKind.Universal);}这应该工作publicstaticDateTimeConvertPayPalDateTime(stringpayPalDateTime){CultureInfoenUS=newCultureInfo("en-US");//由于PST/PDT时区和沙盒与产品中的细微月份差异,接受一些不同的日期格式。string[]dateFormats={"HH:mm:ssMMMdd,yyyyPST","HH:mm:ssMMM.dd,yyyyPST","HH:mm:ssMMMdd,yyyyPDT","HH:mm:ssMMM.dd,yyyyPDT","HH:mm:ssddMMMyyyyPST","HH:mm:ssddMMM.yyyyPST","HH:mm:ssddMMMyyyyPDT","HH:mm:ssddMMM.yyyyPDT"};日期时间输出日期时间;DateTime.TryParseExact(payPalDateTime,dateFormats,CultureInfo.InvariantCulture,DateTimeStyles.None,outoutputDateTime);//转换为本地时区TimeZoneInfohwZone=TimeZoneInfo.FindSystemTimeZoneById("PacificStandardTime");outputDateTime=TimeZoneInfo.ConvertTime(outputDateTime,hwZone,TimeZoneInfo.Local);返回输出日期时间;}本文中的代码似乎正常工作:http://www.codeillustrator.com/2010/03/converting-paypal-paymentdate-to-net.htmlusingSystem;使用System.Globalization;公共街aticclassPayPalTransaction{publicstaticDateTimeConvertPayPalDateTime(stringpayPalDateTime){//接受一些不同的日期格式,因为PST/PDT时区和沙盒与prod中的细微月份差异。string[]dateFormats={"HH:mm:ssMMMdd,yyyyPST","HH:mm:ssMMM.dd,yyyyPST","HH:mm:ssMMMdd,yyyyPDT","HH:mm:ssMMM.dd,yyyyPDT"};日期时间输出日期时间;DateTime.TryParseExact(payPalDateTime,dateFormats,newCultureInfo("en-US"),DateTimeStyles.None,outoutputDateTime);//转换为本地时区outputDateTime=outputDateTime.AddHours(3);返回输出日期时间;(回答这个交叉发布到类似的问题:Howtocastthisdateandsavetodatabase)假设您已经使用DateTime.ParseExact()(或其他类似方法之一)解析了日期,您可以调用DateTime.ToUniversalTime()编辑:也许TimeZoneInfo.ConvertTimeToUtc更合适:ToUniversalTime方法将DateTime值从本地时间转换为UTC要将非本地时区中的时间转换为UTC,请使用TimeZoneInfo.ConvertTimeToUtc(DateTime,TimeZoneInfo)方法。要转换UTC偏移量已知的时间,请使用ToUniversalTime方法。以上就是C#学习教程:如何转Paypal的HH:MM:SSDDMmm(.)YYYYPST/PDT到C#UTC日期时间?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: