2017-05-11 4 views
-1

文字列カレンダーオブジェクト(calendar.toString())をカレンダーオブジェクトに変換することはできません。 私はこのソリューションを試みたが、それはコンソールで一日'12の日付を表示-05-2017' は'02 -02-2017'カレンダー文字列をJavaのカレンダーオブジェクトに変換する

文字列のカレンダーオブジェクト形式:

java.util.GregorianCalendar [time = 1485993600000、areFieldsSet = true、areAllFieldsSet = true、lenient = true、zone = sun.util.calendar.ZoneInfo [id = "アフリカ/カサブランカ"、オフセット= 0、dstSavings = 3600000、useDaylight = true、トランジション= 102 、startMear = 2、startMonth = 2、startDay = -1、startDayOfWeek = 1、startTime = 0、dstSavings = 3600000、useDaylight = true、startYear = 0、startMear = 2、startMonth = 2、startDay = -1、lastRule = java.util.SimpleTimeZone [ firstDayOfWeek = 2、minimalDaysInFirstWeek = 4、ERA = 1、endTime = 0、endMode = 2、endMonth = 9、endDay = -1、endDayOfWeek = 1、endTime = 10800000、endTimeMode = 0] DAY_OF_YEAR = 33、DAY_OF_WEEK = 5、DAY_OF_WEEK_IN_MONTH = 1、AM_PM = 0、HOUR = 0、HOUR_OF_DAY = 0、MINUTE = 0、SECOND = 0ミリ秒= 0、ZONE_OFFSET = 0、DST_OFFSET = 0]

   Calendar calendar = GregorianCalendar.getInstance(); 
      calendar.setTime(new Date("2017/02/02")); 
      System.out.println("calendar : "+calendar.getTime()); 
      try { 
       GregorianCalendar gc = new GregorianCalendar(); 
       DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); 
       System.out.println("calendar : "+calendar.getTime()); 
       gc.setTimeZone(TimeZone.getTimeZone(calendar.toString())); 
       System.out.println("tme zone : "+gc.getTimeZone()); 
       System.out.println("calendar : "+calendar.getTime()); 
       System.out.println("calendar : "+calendar.toString()); 
       System.out.println(formatter.format(gc.getTime())); 
      } 
      catch(Exception e) { 
       //If exception, return server TimeStamp 
      } 

すべてのヘルプしてください

+1

どのような解決策を試しましたか?あなたはコードを投稿していません。 – azurefrog

+1

ああ、いいえ。私は時間(長)とタイムゾーン情報を格納することを考えていました。おそらく 'String'に書式を設定しましたが、' Calendar'から 'toString'値を解析しようとは考えていませんでした。サポートされている新しいJava Time APIを参照してください。 – MadProgrammer

+0

@azurefrog私の投稿にコードを追加しました – imane

答えて

1

それは私だった、私はCalendarGregorianCalendarの両方のすべてのセッターを見たい場合や私が文字列からセッターに必要な値を抽出できると思ったかどうかを見てください。 "time = 1485993600000"はあなたに最も重要な情報、時間を与え、setTimeInMillis()にフィードできます。あなたは "アフリカ/カサブランカ"からタイムゾーンを得ることができなければなりません。その他おそらく正規表現を使って文字列からフィールドを抽出することができます。

あなたはおそらくすべてのケースをカバーしないで生きなければならないでしょう。あなたの特定のGregorianCalendarは、sun.util.calendar.ZoneInfojava.util.SimpleTimeZoneを含んでいるようです。私はそれがいつもそうであるか、他の可能性があるかどうかはわかりません。

あなたの試みの厳格なテストが簡単です:ちょうどあなたの新しく構築されたインスタンスで再びtoString()を呼び出し、あなたは同じ文字列を取得するかどうかを確認します。あなたがいくつかの違いを受け入れるならば、あなたが受け入れることを決めたものの中に実際の違いがあるかどうかを判断する必要があります。

本当に、私がそれを避けることができれば、私は気にしたくありません。あなたが本当に得ようとしていることを得るために、より簡単な仕事や簡単な方法を見つけることができるかどうかが分かります。既にコメントの中で述べたように、GregorianCalendarの代わりにjava.time.LocalDateを使うことができます。 LocalDate.parse()は文字列をLocalDate.toString()から容易に解析し、問題は解決されます。それを見る別の方法の一例を挙げるだけです。

1

コードには、GregorianCalendarという2つのオブジェクトがあります.1つはcalendar、もう1つはgcです。あなたは他のものをプリントアウトし、その後、希望の日付に1つのカレンダーオブジェクトを設定しています。

+1

申し訳ありませんが、@ OleV.V。私は過度に反応したと思う。私はまだ、この問題の要点は、「カレンダー」に値を割り当ててから「gc」を印刷し、その価値が魔法のようにあるオブジェクトから別のオブジェクトに転送されることを期待していると考えています。あなたの答えは、しかし、いくつかの優れた他の情報を含んでいます、それは正解にOPを導くのに明らかに有用でした。私の以前のコメントのために私の謝罪。 –

+0

いい気持ちはありません。 –

1

おかげ@Oleは、私は最終的に解決策を見つけ、それが動作します。

   Calendar calendar = Calendar.getInstance();; 
      calendar.setTime(new Date("2017/02/02")); 
      String[] ds = calendar.toString().split("="); 
      String[] ds2 = ds[1].split(","); 
      try { 
       Calendar cal = Calendar.getInstance();; 
       DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); 
       cal.setTimeInMillis(Long.valueOf(ds2[0])); 
       System.out.println(formatter.format(cal.getTime())); 
      } 
      catch(Exception e) { 

      } 
0

java.time

あなたは今、非常に優れたjava.timeクラスに取って代わられている恐ろしい古いクラスを使用しています。

LocalDateをインスタンス化します。LocalDateクラスは、時間帯のない時間帯のない日付のみの値を表します。

LocalDate ld = LocalDate.parse("2017-02-02") ; 

は、標準ISO 8601形式の文字列を生成するには、 toStringを呼び出します。他のフォーマットのため

String output = ld.toString() ; 

2017年2月2日

DateTimeFormatterクラスを使用します。

DateTimeFormatter f = DateTimeFormatter.ofPattern("dd-MM-uuuu") ; 
String output = ld.format(f) ; 

2017年2月2日

あなたの質問は明確ではありません。コードにGregorianCalendarオブジェクトが渡されているという問題がある場合は、java.time.ZonedDateTimeに変換してください。古いクラスに追加された新しい変換メソッドを呼び出します。

if(myCalendar instanceOf GregorianCalendar) { 
    ZonedDateTime zdt = myCalendar.toZonedDateTime() ; 
} 

希望する日付のみの値をLocalDateとして抽出します。

LocalDate ld = zdt.toLocalDate() ; 

java.timeについて

java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.DateCalendar、& SimpleDateFormatなど、面倒な古いlegacy日時クラスに取って代わります。

maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。

詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。

ここで、java.timeクラスを取得するには?

  • Java SE 8Java SE 9、以降
    • 内蔵しています。
    • バンドルされた実装の標準Java APIの一部です。
    • Java 9には、いくつかのマイナーな機能と修正が加えられています。
  • Java SE 6Java SE 7
    • java.time機能の多くはThreeTen-BackportのJava 6 & 7に戻って、移植されます。
  • Android
      ThreeTenABP
    • プロジェクトは、具体的にはAndroid用(上記)ThreeTen-バックポートを適応させます。
    • How to use ThreeTenABP…を参照してください。

ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、IntervalYearWeekYearQuartermoreなどの便利なクラスがあります。

関連する問題