web-dev-qa-db-ja.com

Android日付をタイムゾーンでフォーマットする

日付を特定の文字列にフォーマットする必要があります。

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カレンダーに取り組んでいるので、それは私が言及した必要なフォーマットだけを受け入れます。

13
fargath

代わりに Joda Time を使用できます。そのDateTimeFormatにはZZ形式の属性があり、必要な処理を実行します。

リンク

大きな利点:SimpleDateFormatとは異なり、DateTimeFormatterはスレッドセーフです。使用法:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ")
    .withLocale(Locale.ENGLISH);
13
fge

パターンで「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()));
29
Grimmy

あなたができることは、substring()を使用して手動で「:」を追加することです。私は以前にこれに直面しました、そしてこの解決策はうまくいきます。

1
TechSpellBound

これを試して

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);
1
Faizan

別のタイムゾーンの日付が必要な場合(タイトルが示唆している)

  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
1
Dan Alboteanu

正規表現を使用して手動で実行しないのはなぜですか?

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);
1
Gal

このコードを試してください

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);
0
Pratik

このコードをリファクタリングし、「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());

0
user2288580