首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从使用timeZone选择的区域获取android.icu.util

如何从使用timeZone选择的区域获取android.icu.util
EN

Stack Overflow用户
提问于 2022-09-03 16:30:16
回答 1查看 35关注 0票数 0

创建2个纺丝器。区域的父旋转器,时区的子旋转器。我在获取选定区域的时区时遇到了困难。这是我用来获取区域的代码。

代码语言:javascript
复制
Locale[] locale = Locale.getAvailableLocales();
        regions = new ArrayList<String>();

        for (Locale loc : locale) {
            region = loc.getDisplayCountry();

            Log.e("Country",""+region);
            if (region.length() > 0 && !regions.contains(region)) {
                regions.add(region);
            }
        }
        Log.d(TAG, "onActivityCreated: " + regions);
        Collections.sort(regions, String.CASE_INSENSITIVE_ORDER);

这是我的旋转器的适配器

代码语言:javascript
复制
ArrayAdapter<String> regionAdapter = new ArrayAdapter<String>(getActivity(),
                R.layout.spinner_item, regions);
        regionAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
        mRegion.setAdapter(regionAdapter);

比我这里的onSelectedItem还多

代码语言:javascript
复制
mRegion.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {


                timeZones = android.icu.util.TimeZone.getAvailableIDs();

                    //Time Zone Adapter
                    ArrayAdapter<String> timeZoneAdapter = new ArrayAdapter<String>(getActivity(),
                            R.layout.spinner_item, timeZones);
                    timeZoneAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);

                    mTimeZone.setAdapter(timeZoneAdapter);
                }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

有了这个设置,我可以让下拉旋转器工作,但他们只是显示所有的区域和所有的时区可用。

EN

回答 1

Stack Overflow用户

发布于 2022-09-07 15:50:44

我想我已经解决了我的问题。

代码语言:javascript
复制
@RequiresApi(api = Build.VERSION_CODES.N)
    public void getTimeZoneByCountryCode(){
        //Retrieves the selected Region
        String _region = mRegion.getSelectedItem().toString();

        //Uses selected region for time zone!
        timeZone = TimeZone.getAvailableIDs(getCountryCodeFromName(_region));

        //Time Zone Adapter
        ArrayAdapter<String> timeZoneAdapter = new ArrayAdapter<String>(getActivity(),
                R.layout.spinner_item, timeZone);
        timeZoneAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);

        mTimeZone.setAdapter(timeZoneAdapter);
    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    public void getCountryName(){
        Locale[] locale = Locale.getAvailableLocales();
        regions = new ArrayList<String>();

        for (Locale loc : locale) {
            region = loc.getDisplayCountry();

            Log.e("Country",""+region);
            if (region.length() > 0 && !regions.contains(region)) {
                regions.add(region);
            }
        }
        Log.d(TAG, "onActivityCreated: " + regions);
        Collections.sort(regions, String.CASE_INSENSITIVE_ORDER);
    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    public static String getCountryCodeFromName(String country) {
        return Arrays.asList(Locale.getISOCountries())
                .stream()
                .map((s) -> new Locale("", s))
                .filter((l) -> l.getDisplayCountry().toLowerCase().equals(country.toLowerCase()))
                .findFirst()
                .map((l) -> l.getCountry().toLowerCase())
                .orElse("UNKNOWN");
    }

下面是我用来编写国家名称、将国家名称转换为国家代码以及从选定国家获取时区的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73593822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档