日期格式为DD MMM YYYY,其中第一个字母为大写

时间:2016-01-19 07:02:06

标签: groovy

需要帮助 - 我需要通过Geb& amp;写的自动化脚本在日期选择器中输入日期。斯波克。期望的日期格式为DD MMM YYYY,其中第一个月的大写字母为大写。这是我尝试过的:

String sDate = String.format(start.toString("dd MMM YYYY")); 
String oDate = sDate.substring(0,2) + sDate.substring(3,6).toUppercase() + sDate.substring(0,4); 

3 个答案:

答案 0 :(得分:0)

在我的电脑上,本月的第一个字母已经是大写字母,但是你可以这样做:

def date = new Date()
def formattedDate = date.format('dd MMM YYYY').with {
    new StringBuilder()
        .append(getAt(0..2))
        .append(getAt(3).toUpperCase())
        .append(getAt(4..-1))
        .toString()
}

答案 1 :(得分:0)

你可以使用这个单行:

new Date().format('dd MMM YYYY').replaceFirst(/\b[a-z]/) { it.toUpperCase() }

assert "19 Jan 2016" == "19 jan 2016".replaceFirst(/\b[a-z]/) { it.toUpperCase() }

replaceFirst使用正则表达式匹配第一个前导小写字母并将其更改为大写。

正则表达式突破

\b     # matches an empty space between \w and \W (see below)
[a-z]  # matches a single lowercase letter

注意 \b匹配正则表达式字符(其中一个[a-zA-Z0-9_]缩写为\w)之间的空白区域该组中的字符(使用正则表达式语言[^a-zA-Z0-9_]或缩写为\W)。 例如文字空间' '属于非正则字词组\W

因此,如果month已经将第一个字母大写(为什么您的语言环境需要这样),则不会发生任何意外情况:

assert "19 Jan 2016" == "19 Jan 2016".replaceFirst(/\b[a-z]/) { it.toUpperCase() }

没有\b而是结果:

assert "19 JAn 2016" == "19 Jan 2016".replaceFirst(/[a-z]/) { it.toUpperCase() }

答案 2 :(得分:0)

使用首字母大写的完整月份名称

string sDate = DateTime.Today.ToString("dd MMMM yyyy");
string oDate = sDate.Replace(sDate.Split(' ')[1], char.ToUpper(sDate.Split(' ')[1][0]) + sDate.Split(' ')[1].Substring(1));

对于首字母大写的短月份名称

string sDate = DateTime.Today.ToString("dd MMM yyyy");
string oDate = sDate.Replace(sDate.Split(' ')[1][0], char.ToUpper(sDate.Split(' ')[1][0]);

对于基于文化的日期

string date = DateTime.Today.ToString("dd MMMM yyyy", CultureInfo.CreateSpecificCulture("it-IT"));