我需要将月份名称的缩短版本转换为更长的代表(例如" Dec" - >" 12月")。月份名称是一个字符串,我宁愿不首先将其转换为日期对象。
有一种简单的方法吗?
编辑: 我的问题与插入" Dec"作为mysql中的表名(当然会引发语法错误),对于我的用例,更改这个值比让mysql命令改变它更好。
答案 0 :(得分:3)
显而易见的方法是:
if (month.equalsIgnoreCase("Jan"))
month = "January";
else if (month.equalsIgnoreCase("Feb"))
month = "February";
// and so on...
如果您愿意,也可以用switch
表示:
switch (month.toLowerCase()) {
case "jan": month = "January"; break;
case "feb": month = "February"; break;
// and so on...
}
或者,更宽容的版本:
if (month.toLowerCase().startsWith("Jan"))
month = "January";
// and so on...
我想你可以先将它们存储在地图中:
Map<String,String> monthNames = new HashMap<String,String>();
monthNames.put("jan", "January");
monthNames.put("feb", "February");
// and so on...
String shortMonth = "Jan";
String month = monthNames.get(shortMonth.toLowerCase());
if (month == null)
month = shortMonth;
我想,使用地图可以轻松地将翻译添加到其他语言。您还可以使用Russell Zahniser's很好的答案自动使用当前区域设置。
似乎没有太多理由将它们解析为日期和返回(尽管如果你这样做,请参阅newuser's answer)。
有很多方法可以做到这一点。
答案 1 :(得分:2)
试试这个,使用此格式获取完整值 MMMM
String month = "Dec";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM");
try
{
Date date = simpleDateFormat.parse(month);
simpleDateFormat = new SimpleDateFormat("MMMM");
System.out.println(simpleDateFormat.format(date));
}
catch (ParseException ex)
{
System.out.println("Exception "+ex);
}
答案 2 :(得分:2)
使用为用户的区域设置配置的月份名称来执行此操作:
// Set up a lookup table like this:
Map<String,String> shortToLong = new HashMap<String,String>();
DateFormatSymbols symbols = new DateFormatSymbols();
for(int i = 0; i < symbols.getMonths().length; i++) {
shortToLong.put(symbols.getShortMonths()[i], symbols.getMonths()[i]);
}
// Then use like this:
String longMonth = shortToLong.get(shortMonth);
答案 3 :(得分:2)
另一种方法是从长月名开始,然后缩写每个名称,看看哪一个与给定的输入匹配。
String s="MAR";
String months[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
for(String i : months) {
if(i.substring(0,3).equalsIgnoreCase(s)) {
System.out.println(i);
break;
}
}