在 Java 公历中设置语言环境

Setting up locale in Java Gregorian Calendar

Java API 指的是IANA Language Subtag Registry(region下)查找国家代码。在 IANA 网站中,英国的区域代码是 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

请问我应该怎么做?

语言环境 class 中的常量是国家名称,而不是国家代码。例如,有 Locale.ITALY,但没有 Locale.IT。这就是为什么也没有 Locale.GB.

您所指的代码是 ISO 3166 alpha-2 国家/地区代码。它们仅用作 Locale 构造函数中的参数。之后如何命名此对象取决于您。

尝试Locale.UK让你的代码编译。

其他答案正确。

java.time

这是您的代码的当前版本:

        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 的原因(在过去我们使用 class)是因为它决定了周计划:一周的第一天是星期六、星期日或星期一取决于地区。今天,如果您需要针对特定​​语言环境的周计划,您应该使用 WeekFields class 及其静态 of​(Locale) 方法。

GregorianCalendar class 早就过时了。设计的也很差,所以我建议你不要使用它。

在下面的函数中,我试图将 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;
}