需要帮助 - 我需要通过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);
答案 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"));