C#如何为字符串中的多个DateTime添加+2 UTC偏移量
解决方案
可以通过正则匹配+日期时间解析调整的方式处理字符串中的多个日期时间,具体实现如下:
1. 编写日期时间调整函数
using System.Globalization; using System.Text.RegularExpressions; private string AdjustMarketDatetimes(string marketsStr) { // 匹配每个条目里的日期时间部分(格式:"- yy/MM/dd HH:mm") var datetimeRegex = new Regex(@"- (\d{2}/\d{2}/\d{2} \d{2}:\d{2})"); return datetimeRegex.Replace(marketsStr, match => { // 提取捕获到的日期时间字符串 var dtString = match.Groups[1].Value; // 精确解析日期时间(指定格式和不变文化,避免区域差异导致解析失败) if (DateTime.TryParseExact(dtString, "yy/MM/dd HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out var originalDt)) { // 加2小时后,格式化为原字符串格式 var adjustedDt = originalDt.AddHours(2); return $"- {adjustedDt.ToString("yy/MM/dd HH:mm", CultureInfo.InvariantCulture)}"; } // 解析失败时返回原内容,防止破坏字符串结构 return match.Value; }); }
2. 在返回模型时调用该函数
return new Model { markets = AdjustMarketDatetimes(response.markets) };
关键说明
- 正则匹配逻辑:
@"- (\d{2}/\d{2}/\d{2} \d{2}:\d{2})"精准定位每个市场条目后的日期时间片段,确保只处理目标内容。 - 日期解析与格式化:使用
TryParseExact指定精确格式解析,避免系统区域设置(如不同日期分隔规则)导致的解析错误;调整后用原格式输出,保证字符串结构不变。 - 容错处理:解析失败时返回原匹配内容,避免因异常格式破坏整个字符串。
如果实际日期格式是dd/MM/yy而非yy/MM/dd,只需将代码中的格式字符串"yy/MM/dd HH:mm"替换为"dd/MM/yy HH:mm"即可。
内容的提问来源于stack exchange,提问作者jacks
相关产品推荐
相关产品推荐

