Java API是指IANA语言子标记注册表(在区域下)以查找国家/地区代码。在IANA websiste中,英国的地区代码为GB。但是,使用GB设置GregorianCalendar
对象:
import java.util.*;
class MainClass{
public static void main (String[] args) {
GregorianCalendar date1 = new GregorianCalendar(Locale.GB);
int year = date1.get(GregorianCalendar.YEAR);
int weekday = date1.get(GregorianCalendar.DAY_OF_WEEK);
System.out.println(year);
System.out.println(weekday);
}
}
导致以下错误消息:
cannot find symbol
symbol: variable GB
location: class locale
请问我该怎么办?
答案 0 :(得分:0)
Locale类中的常量是国家/地区名称,而不是国家/地区代码。例如,有Locale.ITALY
,但没有Locale.IT
。这就是为什么没有Locale.GB
。
您所说的代码是ISO 3166 alpha-2国家/地区代码。它们仅用作Locale构造函数中的参数。取决于你如何命名这个对象。
答案 1 :(得分:0)
尝试使用Locale.UK来获取编译代码。
答案 2 :(得分:0)
其他答案都是正确的。
以下是您当前的代码版本:
LocalDate today = LocalDate.now(ZoneId.of("Europe/London"));
int year = today.getYear();
DayOfWeek weekday = today.getDayOfWeek();
System.out.println(year);
System.out.println(weekday);
今天(6月17日)的输出是
2018
SUNDAY
到目前为止,您甚至不需要语言环境(但时区至关重要,当然,您可能还想格式化特定语言环境的日期)。
我们将区域设置传递给GregorianCalendar
的原因(在我们使用该类的过去)确定了周计划:一周的第一天是周六,周日或周一,具体取决于区域设置。今天,如果您需要特定区域设置的周方案,则应使用WeekFields
类及其静态of(Locale)
方法。
GregorianCalendar
课程已经过时了。它的设计也很差,所以我建议你不要使用它。
答案 3 :(得分:0)
在下面的函数中,我试图将TimeZone“ Asia / Singapore”设置为以“ yyy-MM-dd”格式发送的日期字符串,您甚至可以将dateString格式作为另一个参数传递,并设置太SimpleDateFormat对象,这是如何在GregorianCalendar中定位时间的完美解决方案。
public static GregorianCalendar getGregorianCalendarFromDateString(String dateString) {
GregorianCalendar gregCal = null;
try {
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
formatter.setTimeZone(TimeZone.getTimeZone("Asia/Singapore"));
Date date = formatter.parse(dateString);
gregCal = new GregorianCalendar();
gregCal.setTime(date);
gregCal.setTimeZone(TimeZone.getTimeZone("Asia/Singapore"));
} catch (DatatypeConfigurationException | ParseException e) {
LOG.error("getGregorianCalendarFromDateString::"+
"Caught error while parsing date::"+e.getMessage());
}
return gregCal;
}