1

我想根据时区制作日历。我试图通过浏览不同的查询来解决这个问题,但我做不到。现在它选择移动默认时间。如果有人有想法,请帮助我。时区应该是英国时间。

我试过:

{
    Calendar c1;
    c1 = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.UK);
    int hour = c1.get(Calendar.HOUR);
    int minutes = c1.get(Calendar.MINUTE);
    int seconds = c1.get(Calendar.SECOND);
    int day = c1.get(Calendar.DAY_OF_MONTH);
    int month = c1.get(Calendar.MONTH);
    int year = c1.get(Calendar.YEAR);
} 

但它也返回系统日期。

4

2 回答 2

2

java.time

    ZonedDateTime nowInUk = ZonedDateTime.now(ZoneId.of("Europe/London"));
    int hour = nowInUk.getHour();
    int minutes = nowInUk.getMinute();
    int seconds = nowInUk.getSecond();
    int day = nowInUk.getDayOfMonth();
    Month month = nowInUk.getMonth();
    int year = nowInUk.getYear();

    System.out.println("hour = " + hour + ", minutes = " + minutes + ", seconds = " + seconds 
            + ", day = " + day + ", month = " + month + ", year = " + year);

当我刚才运行这个片段时,它打印了:

小时 = 3,分钟 = 41,秒 = 15,日 = 5,月 = 10 月,年 = 2018

ZonedDateTime很大程度上取代了过时的Calendar类。

你的代码出了什么问题?

英国时间的时区 ID 是Europe/London. 在您使用的代码中UTC,这是另一回事,至少有时会给您带来不同的结果。英国时间在某些年份的某些年份与 UTC 重合,但不是在今年的这个时候。所以你的时间比英国时间早一小时。

c1.get(Calendar.HOUR)为您提供上午或下午从 1 到 12 的时间,我认为这不是您想要的。

问题:我可以java.time在安卓上使用吗?

是的,java.time在 Android 设备上运行良好。它只需要至少Java 6

  • 在 Java 8 及更高版本以及新的 Android 设备上(据我所知,从 API 级别 26 开始)新的 API 是内置的。
  • 在 Java 6 和 7 中获得 ThreeTen Backport,新类的后向端口(ThreeTen 用于 JSR 310,现代 API 首次被描述的地方)。
  • 在(较旧的)Android 上,使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。org.threeten.bp确保从包和子包中导入日期和时间类。

链接

于 2018-10-05T02:42:29.833 回答
0

使用此方法从时区获取时间,但这里有一个条件必须需要在设置中检查自动时间,否则移动到设置页面。

 private void setDateTime() {
//        Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 1);
        try {
            int value = Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME);
            if (value == 1) {
                Log.i("value", String.valueOf(value));
                {
                    TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
                    String pattern = "yyyy-MM-dd HH:mm:ss";
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("en", "in"));
                    String date = simpleDateFormat.format(new Date());
                    Log.i("get C_d_t", date);
                    txt_time.setText(date);
                }
            } else {
                //move to settings
                Toast.makeText(getBaseContext(), "Must need to checked automatic date & time", Toast.LENGTH_SHORT).show();
                startActivityForResult(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS), 0);


            }
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }


    }
于 2018-10-05T05:53:12.700 回答