首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式将日期格式从dd-mon-yy转换为dd/MM/yy。

正则表达式将日期格式从dd-mon-yy转换为dd/MM/yy。
EN

Stack Overflow用户
提问于 2016-02-27 15:16:46
回答 2查看 1.2K关注 0票数 2

想知道,powershell中的regex是否可以替换从dd-mon-yy到dd/MM/yy的日期?

例子:25-2月16日改为25/02/16

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-27 16:25:04

您应该使用[DateTime]::ParseExact(),因为regex需要12个不同的替换操作,或者一个MatchEvalutor来转换这个月。

使用regex MatchEvaluator的示例

代码语言:javascript
复制
$MatchEvaluator = {  
  param($match) 

  #Could have used a switch-statement too..
  $month = [datetime]::ParseExact($match.Groups[2].Value,"MMM",$null).Month

  "{0:00}/{1:00}/{2:00}" -f $match.Groups[1].Value, $month, $match.Groups[3].Value
}

[regex]::Replace("25-FEB-16","(\d+)-(\w+)-(\d+)", $MatchEvaluator)
25/02/16

考虑到这一点,我想说,只使用ParseExact()是一个更好的解决方案:

代码语言:javascript
复制
try {
    [datetime]::ParseExact("25-FEB-16","dd-MMM-yy", $null).ToString("dd/MM/yy", [cultureinfo]::InvariantCulture)
} catch {
    #Invalid date-format
}
25/02/16
票数 1
EN

Stack Overflow用户

发布于 2016-02-27 16:22:44

更好的解决方案是使用日期解析和格式化函数,而不是基于正则表达式的字符串替换。

代码语言:javascript
复制
[DateTime]::ParseExact('25-FEB-16', 'dd-MMM-yy', $null).ToString('dd/MM/yy', [System.Globalization.CultureInfo]::InvariantCulture)
# => 25/02/16

这也会使您对内部环境敏感,以防您在另一种语言中的日期与月份名称一起运行的系统上运行。但是使用ParseExactInvariantCulture选项意味着区域设置敏感性不会影响到指定的格式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35671450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档