日付を特定の文字列にフォーマットする必要があります。
SimpleDateFormat
クラスを使用して、パターン "yyyy-MM-dd'T'HH:mm:ssZ
"を使用して日付をフォーマットしました。現在の日付を次のように返します。
"2013-01-04T15:51:45+0530
"しかし、私は
"2013-01-04T15:51:45+05:30
"。
以下は使用されるコーディングです、
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime()));
出力:フォーマットされた文字列:2013-01-04T15:51:45+0530
グリニッジ標準時の間にコロンを追加するだけの2013-01-04T15:51:45+05:30
の形式が必要です。
私はイベントを挿入するためにGoogleカレンダーに取り組んでいるので、それは私が言及した必要なフォーマットだけを受け入れます。
パターンで「Z」の代わりに「ZZZZZ」を使用することもできます( ドキュメント による)。このようなもの
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ", Locale.ENGLISH);
Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime()));
あなたができることは、substring()を使用して手動で「:」を追加することです。私は以前にこれに直面しました、そしてこの解決策はうまくいきます。
これを試して
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
System.out.println("formatted string: "+sdf.format(c.getTime()));
String text = sdf.format(c.getTime());
String result = text.substring(0, 22) + ":" + text.substring(22);
System.out.println("result = " + result);
別のタイムゾーンの日付が必要な場合(タイトルが示唆している)
val nowMillsUTC = System.currentTimeMillis()
val timeZoneID = "Australia/Perth"
val tz = TimeZone.getTimeZone(timeZoneID)
val simpleDateFormat = SimpleDateFormat("HH.mm dd.MMM.yyyy", Locale.getDefault())
simpleDateFormat.setTimeZone(tz)
val resultTxt = simpleDateFormat.format(nowMillsUTC)
print(timeZoneID + " -> " + resultTxt)
// Australia/Perth -> 19.59 21.Mar.2019
正規表現を使用して手動で実行しないのはなぜですか?
String oldDate = "2013-01-04T15:51:45+0530";
String newDate = oldDate.replaceAll("(\\+\\d\\d)(\\d\\d)", "$1:$2");
同じ結果、部分文字列(パフォーマンスが問題の場合)。
String oldDate = "2013-01-04T15:51:45+0530";
int length = oldDate.length();
String newDate = oldDate.substring(0, length - 2) + ':' + oldDate.substring(length - 2);
このコードを試してください
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z", Locale.ENGLISH);
String s = sdf.format(c.getTime());
String fDate = s.substring(0, s.length()-2) +":"+s.substring(s.length()-2, s.length());
Log.e("check", "formatted string: "+fDate);
このコードをリファクタリングし、「Locale.getDefault()」を必要なロケールに置き換えるだけです。
private SimpleDateFormat getDateFormat() {
SimpleDateFormat dateFormat = (SimpleDateFormat) SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.DEFAULT, Locale.getDefault());
String pattern = dateFormat.toLocalizedPattern();
pattern = pattern.trim();
dateFormat.applyLocalizedPattern(pattern);
return dateFormat;
}
//そしてここに使用法があります
SimpleDateFormat sdf = getDateFormat();
sdf.format(new Date());