Skip to content Skip to sidebar Skip to footer

Force Android Dateutils.getrelativedatetimestring() To Ignore The Device Locale?

I've found using the android.text.format.DateUtils relative APIs that return values like 'yesterday' or '2 hours ago' very nice - but my app does not support every language Android

Solution 1:

This is working for me up to Android 7

voidforceLocale(Locale locale) {
    Configurationconf= getBaseContext().getResources().getConfiguration();
    updateConfiguration(conf, locale);
    getBaseContext().getResources().updateConfiguration(conf, getResources().getDisplayMetrics());

    ConfigurationsystemConf= Resources.getSystem().getConfiguration();
    updateConfiguration(systemConf, locale);
    Resources.getSystem().updateConfiguration(conf, getResources().getDisplayMetrics());

    Locale.setDefault(locale);
  }

  voidupdateConfiguration(Configuration conf, Locale locale) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
      conf.setLocale(locale);
    }else {
      //noinspection deprecation
      conf.locale = locale;
    }
  }

Solution 2:

According to the source code of the DateUtils class it uses both Resource.getSystem() and Locale.getDefault() method for formatting date and time. You can change the default Locale using Locale.setDefault() method but I don't think it's possible to change the return value of the Resource.getSystem() method. You can try to change the default locale to Locale.US but it seems to me that results will be even worse in this case.

Post a Comment for "Force Android Dateutils.getrelativedatetimestring() To Ignore The Device Locale?"