The Android version will go up. Android 11 is about to be released. It seems that the Japanese era "Reiwa" will finally be supported by the standard API on Android 11.
I will state the conclusion first.
--On Android 11 (R), it seems that the Japanese era "Reiwa" is finally supported by the standard API. --Since API level 24, Android standard API has already incorporated ICU. ――But API levels 24 to 29 do not support "Reiwa". It is only "Heisei".
By the way, the code name for the name of the candy has disappeared from "Q".
KitKat, Lollipop, Marshmallow, Nougat, Oreo, Pie. Occasionally, with a mixture of registered trademarks. The Android kids were excited about what the sweets would be, starting with a "Q", but Google said, "I've stopped naming sweets."
Android 10 is "Q". The 11 that will be released soon is "R".
Supports "Reiwa" with "R" on Android ... No way! Is that "R" the R of "Reiwa"? !! What?
And apart from this version number such as 10 or 11, and the code name, the important number for the developer is "[API level](https://developer.android.com/guide/topics/manifest/uses-sdk-" element? hl = ja) ". Android 8.0 is Oreo and has an API level of 26. However, when it comes to Android 8.1, it's also Oreo, but the API level is 27. It's complicated!
And what is the API level number assigned to "R" ...? I wrote it towards the end of this article, so stay tuned. (Sumimasen)
http://site.icu-project.org/home
It is an abbreviation for "International Components for Unicode". Anyway, various useful APIs are recorded. Open source software.
The com.ibm.icu.util.JapaneseCalendar
class corresponds to the Japanese era.
From the first era "Taika" to the present day. I haven't verified the maniac of how to handle the Northern and Southern Dynasties.
Honnoji Incident
import java.util.Locale;
import com.ibm.icu.text.DateFormat;
import com.ibm.icu.text.DateFormatSymbols;
import com.ibm.icu.text.SimpleDateFormat;
import com.ibm.icu.util.GregorianCalendar;
import com.ibm.icu.util.JapaneseCalendar;
public class Honnoujinohen {
public static void main(String[] args) {
JapaneseCalendar jpCalendar = new JapaneseCalendar();
DateFormatSymbols dfs = new DateFormatSymbols(jpCalendar, Locale.JAPANESE);
DateFormat dateFormat = new SimpleDateFormat("Gyy year MM month dd day", dfs);
dateFormat.setCalendar(jpCalendar);
//"Honnoji Incident" June 2, 1582
int year = 1582;
int month = 6;
int day = 2;
String s = dateFormat.format(new GregorianCalendar(year, month - 1, day).getTime());
System.out.println(s);
}
}
Execution result
June 02, 10th year of Tensho
It is unbearable for taiga drama fans and reki-jo. Kirin is coming. Was it the era that wrote "Heaven is right"? Oh, Onin War. Tenpo Reforms. Ansei Purge. You can run around the times in your brain just by thinking about the era name.
This ICU is compatible with "Reiwa" from version 64.2 released on April 17, 2019.
In the Android standard API, ICU was imported from API level 24 (Android 7.0 Nougat).
The package has changed just because it was imported. For example, the JapaneseCalendar
class above is ʻandroid.icu.util.JapaneseCalendar`.
And. finally. At the API level of Android 11 (R),
python
public static final int REIWA
Will be added! Rainy day int enum pattern! !! !! No! !! !! I don't know, IBM's ICU is an int enum pattern in the first place! !! !!
I made an app like this.
"Kenmu Restoration" is a new policy that Emperor Go-Daigo started on July 17, 1333 after defeating the Kamakura Shogunate, but on that day the era name is still "Genko", isn't it? I think I'm going to take the next second semester midterm exam.
From Heisei to Reiwa.
The development environment is as follows.
Android Studio 3.6.1 Build #AI-192.7142.36.36.6241897, built on February 27, 2020 Runtime version: 1.8.0_212-release-1586-b04 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o Windows 10 10.0 GC: ParNew, ConcurrentMarkSweep Memory: 1237M Cores: 8 Registry: ide.new.welcome.screen.force=true Non-Bundled Plugins:
Must be created at the API level of Android 11 (R). Make the following in the Gradle configuration file (partially omitted).
build.gradle
android {
compileSdkVersion 'android-R'
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.gengou"
minSdkVersion 24
}
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
}
At the time of this writing, no numbers have been assigned to the Android 11 (R) API level. It seems that it is still a preview version. It is estimated that it will probably be 30
when the official version is released.
minSdkVersion
must be at least 24
. Because, as mentioned above, ICU was incorporated into the Android standard API from API level 24.
Activity
MainActivity.java
package com.example.gengou;
import android.icu.text.DateFormat;
import android.icu.text.DateFormatSymbols;
import android.icu.text.SimpleDateFormat;
import android.icu.util.GregorianCalendar;
import android.icu.util.JapaneseCalendar;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText year = findViewById(R.id.year);
EditText month = findViewById(R.id.month);
EditText day = findViewById(R.id.day);
TextView gengo = findViewById(R.id.gengou);
findViewById(R.id.button).setOnClickListener(v -> {
int y = Integer.parseInt(year.getText().toString());
int m = Integer.parseInt(month.getText().toString());
int d = Integer.parseInt(day.getText().toString());
JapaneseCalendar jpCalendar = new JapaneseCalendar();
DateFormatSymbols dfs = new DateFormatSymbols(jpCalendar, Locale.JAPANESE);
DateFormat dateFormat = new SimpleDateFormat("Gyy year MM month dd day", dfs);
dateFormat.setCalendar(jpCalendar);
String s = dateFormat.format(new GregorianCalendar(y, m - 1, d).getTime());
gengo.setText(s);
});
}
}
Even though the Android standard API supports Reiwa! Instead of using it, IBM's ICU responds to Reiwa, and it's a mess! You may think that, but I would like to do such a thing for the following reasons.
--The Android standard API supports Reiwa from "R". That's good.
--ICU was incorporated into the Android standard API at API level 24 (Android 7.0 "N").
--If so, the minSdkVersion
must be at least 24 in the Gradle settings, or the ʻandroid.icu` package cannot be used before Reiwa Unun.
――But I want to make my own app compatible with Android versions 6, 5, and 4!
So that's how it's done.
build.gradle
dependencies {
implementation 'com.ibm.icu:icu4j:64.2'
}
Add it as a dependent library and it's SyncNow. Specify 64.2
or higher that supports Reiwa.
The ʻimport` statement looks like this to avoid name collisions.
Pay attention to the package
import com.ibm.icu.text.DateFormat;
import com.ibm.icu.text.DateFormatSymbols;
import com.ibm.icu.text.SimpleDateFormat;
import com.ibm.icu.util.GregorianCalendar;
import com.ibm.icu.util.JapaneseCalendar;
import java.util.Locale;
Only Locale
is a stable java.util
package.
With this, even Android 6, 5 and 4 can support Reiwa.
Rest assured that ICU does not have the era name "Kobun".
that's all.
Recommended Posts