C#中挪威日期格式下日期加算与指定格式输出的实现问题
解决挪威日期格式转换问题
需求回顾
你需要将挪威格式的日期(如31 juli 2021)添加14天后,转换为同格式的结果(如14 august 2021),现有代码目前得到的是短日期格式(14.08.2021),且已有获取挪威语月份名称的方法。
方案一:不重构现有逻辑的快速修改
首先注意你代码里有个变量名笔误:invoiceDayPlus14应该是invoiceDatePlus14,先修正这个小问题。然后只需要替换最后一步的格式化代码,利用你已有的getMonthName方法手动拼接目标格式:
// 替换原来的ToShortDateString()行 string rsvpBy_monthIsInt = $"{invoiceDatePlus14.Day} {getMonthName(invoiceDatePlus14.Month)} {invoiceDatePlus14.Year}";
这个改动完全保留了现有代码的整体逻辑,只是把短日期输出改成了符合要求的挪威语日期格式,直接得到14 august 2021这样的结果。
方案二:推荐的重构方案
虽然现有逻辑能通过小修改实现需求,但利用.NET原生的本地化API重构会更简洁、可靠,还能避免手动处理月份名称的潜在问题:
- 移除冗余的自定义方法(可选,若保留也不影响,但重构后用不到):你手动实现的
getMonthName方法其实可以被.NET的文化格式化API替代。 - 使用挪威文化直接格式化日期:
// 创建挪威文化实例 var norwegianCulture = CultureInfo.CreateSpecificCulture("no"); // 用指定格式格式化日期,"d MMMM yyyy"对应:日 + 完整月份名 + 四位年份 string rsvpBy_monthIsInt = invoiceDatePlus14.ToString("d MMMM yyyy", norwegianCulture);
重构的优势
- 代码更简洁,减少手动拼接的冗余代码
- 避免手动处理月份名称可能出现的拼写、大小写错误
- 扩展性更强:后续如果需要切换其他北欧语言或调整日期格式,只需修改文化代码或格式字符串即可
内容的提问来源于stack exchange,提问作者Ole M
相关产品推荐
相关产品推荐

