私のプロジェクトでは、json形式でAPI応答を取得しています。このJul 16, 2013 12:08:59 AM
のようなUTC時間形式の時間の文字列値を取得します。
これを現地時間に変更する必要があります。これは、アプリが現地時間を表示するために必要な場所です。これを行う方法
ここに私が試したコードがあります:
String aDate = getValue("dateTime", aEventJson);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss z");
simpleDateFormat.setTimeZone(TimeZone.getDefault());
String formattedDate = simpleDateFormat.format(aDate);
ADateにJul 16, 2013 12:08:59 AM
が含まれているとします
これが私の試みです。
String dateStr = "Jul 16, 2013 12:08:59 AM";
SimpleDateFormat df = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a", Locale.ENGLISH);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = df.parse(dateStr);
df.setTimeZone(TimeZone.getDefault());
String formattedDate = df.format(date);
Am/pmマーカーの「a」にも注意してください...
現代の答えに貢献したいと思います。 SimpleDateFormat
は2013年に日付と時刻を解析およびフォーマットするためのクラス(Joda-Timeを除く)でしたが、現在では古くなっており、_Java.time
_またはJSR- 310、2014年にJava 8で登場した最新のJava日時API。
しかし、ほとんどのAndroidデバイスはまだJava 8を実行しません。幸い、JSR-310のJava Android 7.へのバックポートであるThreeTenABPを通じて、最新のJava日時APIを引き続き使用できます。詳細は この質問:Android ProjectでThreeTenABPを使用する方法 。
コードは次のとおりです。
_ DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("MMM dd, uuuu hh:mm:ss a", Locale.ENGLISH);
String aDate = "Jul 16, 2013 12:08:59 AM";
String formattedDate = LocalDateTime.parse(aDate, formatter)
.atOffset(ZoneOffset.UTC)
.atZoneSameInstant(ZoneId.systemDefault())
.format(formatter);
System.out.println(formattedDate);
_
私のコンピューターはヨーロッパ/コペンハーゲンのタイムゾーンを実行しているため、7月はUTCより2時間早いため、
_Jul 16, 2013 02:08:59 AM
_
その他のポイント:
h
が必要です。大文字のH
は、0〜23の時間帯を表します。SimpleDateFormat
またはDateTimeFormatter
のいずれかで明示的なロケールを指定することをお勧めします。ロケールが指定されていない場合、フォーマッタはデバイスのデフォルトのロケールを使用します。 「Jul」と「AM」は英語です。コードが多くのデバイスでうまく動作するのは、ある日、英語以外のロケールでクラッシュするデバイスで実行されるまでです。ZoneId.of("Asia/Kolkata")
のように、目的のタイムゾーンを明示的に指定します。 JVMのデフォルトのタイムゾーンは、プログラムの他の部分または同じJVMで実行されている他のプログラムによって変更される可能性があるため、信頼できません。//your UTC time var
long time = UTCtime;
//convert it
Time timeFormat = new Time();
timeFormat.set(time+TimeZone.getDefault().getOffset(time));
//use the value
long localTime = timeFormat.toMillis(true);
1.UTCコンバーターへのローカル
public static String localToUTC(String dateFormat, String datesToConvert) {
String dateToReturn = datesToConvert;
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
sdf.setTimeZone(TimeZone.getDefault());
Date gmt = null;
SimpleDateFormat sdfOutPutToSend = new SimpleDateFormat(dateFormat);
sdfOutPutToSend.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
gmt = sdf.parse(datesToConvert);
dateToReturn = sdfOutPutToSend.format(gmt);
} catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn;
}
2。UTCからローカルコンバーター
public static String uTCToLocal(String dateFormatInPut, String dateFomratOutPut, String datesToConvert) {
String dateToReturn = datesToConvert;
SimpleDateFormat sdf = new SimpleDateFormat(dateFormatInPut);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date gmt = null;
SimpleDateFormat sdfOutPutToSend = new SimpleDateFormat(dateFomratOutPut);
sdfOutPutToSend.setTimeZone(TimeZone.getDefault());
try {
gmt = sdf.parse(datesToConvert);
dateToReturn = sdfOutPutToSend.format(gmt);
} catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn; }
次のコードを使用します。
TimeZone defaultTimeZone = TimeZone.getDefault();
String strDefaultTimeZone = defaultTimeZone.getDisplayName(false, TimeZone.SHORT);
//Your Code
String aDate = getValue("dateTime", aEventJson);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss z");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone(strDefaultTimeZone));
String formattedDate = simpleDateFormat.format(aDate);
これは動作するはずです。