try {
SimpleDateFormat strTemp = new SimpleDateFormat("ddMMMyy", Locale.US);
Date reasult = strTemp.parse(input);
String checkDate = reasult.toString().substring(8, 10) + reasult.toString().substring(4, 7) + reasult.toString().substring(26);
if (!checkDate.toUpperCase().equals(input))
return false;
else
return true;
} catch (Exception ex) {
return false;
}
由于API告诉我java.util.Date.toString()就像格式“dow mon dd hh:mm:ss zzz yyyy”,我只是想知道toString()的内容格式是否会改变而Windows语言环境改变了吗?如“俄语”,“英语”,建议输入相同,checkDate值是否相同?谢谢你的帮助。
答案 0 :(得分:3)
Date.toString()
与区域设置无关。您可以观察到的最重要的变化是时区,这取决于计算机的时区设置。这是by design。
将此Date对象转换为以下形式的字符串:
dow mon dd hh:mm:ss zzz yyyy
其中:
dow
是一周中的某一天(Sun
,Mon
,Tue
,Wed
,Thu
,Fri
,Sat
)。mon
是月份(Jan
,Feb
,Mar
,Apr
,May
,Jun
,{{ 1}},Jul
,Aug
,Sep
,Oct
,Nov
)。Dec
是一个月中的某一天(dd
到01
),为两位小数。31
是一天中的小时(hh
到00
),为两位小数。23
是一小时内的分钟(mm
到00
),为两位小数。59
是分钟内的第二个ss
到00
,为两位小数。61
是时区(可能反映夏令时)。标准时区缩写包括方法解析识别的缩写。如果时区信息不可用,则zzz
为空 - 也就是说,它根本不包含任何字符。zzz
是年份,为四位十进制数字。
答案 1 :(得分:2)
它不会因其语言环境独立而改变。曾经有toLocaleString()
但现在已弃用。
您可以看到代码 -
public String toString() {
// "EEE MMM dd HH:mm:ss zzz yyyy";
BaseCalendar.Date date = normalize();
StringBuilder sb = new StringBuilder(28);
int index = date.getDayOfWeek();
if (index == gcal.SUNDAY) {
index = 8;
}
convertToAbbr(sb, wtb[index]).append(' '); // EEE
convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
TimeZone zi = date.getZone();
if (zi != null) {
sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
} else {
sb.append("GMT");
}
sb.append(' ').append(date.getYear()); // yyyy
return sb.toString();
}
答案 2 :(得分:2)
仔细考虑时区!除此之外,不,它不会根据语言环境而改变。检查java.util.Date.toString()
方法的源代码(这总是一个好主意!):
public String toString() {
// "EEE MMM dd HH:mm:ss zzz yyyy";
BaseCalendar.Date date = normalize();
StringBuilder sb = new StringBuilder(28);
int index = date.getDayOfWeek();
if (index == gcal.SUNDAY) {
index = 8;
}
convertToAbbr(sb, wtb[index]).append(' ');
...
并且该wtb是私有的最终静态字符串:
private final static String wtb[] = {
"am", "pm",
"monday", "tuesday", "wednesday", "thursday", "friday",
"saturday", "sunday",
"january", "february", "march", "april", "may", "june",
"july", "august", "september", "october", "november", "december",
"gmt", "ut", "utc", "est", "edt", "cst", "cdt",
"mst", "mdt", "pst", "pdt"
};
所以,不,它不会改变,它将永远是英文名字。
更新:正如@nhahtdh指出的那样,时区将根据计算机区域配置的设置位置而改变
答案 3 :(得分:0)
通常toString()
负责转换为String。什么是本地系统上的区域设置更改并不重要。
//Now my local date time (US & CANADA)
Date dt1=new Date();
System.out.println("Date is ::"+dt1.toString());
它可以自动使用您的语言环境。上面的代码也正常工作。