2

だから私はパターンを変更するために取得して使用しようとしていますが、最初に文字列を取得してからString trDate="20120106";日付Date trDate=2012-01-06を生成し、次に呼び出して文字列を返しますが、日付、提案が必要です、ここにコードがあります持ってる:SimpleDateFormatparseformat

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate);
String krwtrDate = new SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH).format(tradeDate);
Date krwTradeDate = new SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH).parse(krwtrDate);

これは似たような質問ですが、私の質問には答えません

Date formatのみを期待する別の関数に文字列を渡す必要があるため、変換された文字列が必要Date objectです。

誰かがフォーマットで取得dateする方法の例を与えることができれば本当にありがたいですか?yyyy-mm-ddstringyyyymmdd

4

4 に答える 4

7

---解説により回答が更新されました---

わかりました。使用しているAPIには、日付を次の形式で表す文字列が必要です。2012-04-20

次に、誤ってフォーマットされたものを解析してからDate、必要なフォーマットで再度フォーマットする必要があります。

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH).parse(trDate);
String krwtrDate = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH).format(tradeDate);

また、月の使用を間違えたことがよくあるため、「月」の指定を変更したことにも注意してください。「時:分:秒」のため、日付形式には2つの一般的な「名前」があり、どちらも、分と月で始まります。したがって、大文字は数か月間使用され、小文字は分単位で使用されます。これがあなたが問題に直面している本当の理由であるに違いありません。mmMm

---元の投稿が続きます---

APIがを必要とする場合、java.util.Dateあなたはあなたが持っているほど多くのことをする必要はありません。あなたは実際にjava.util.Date2行だけで持っています

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate);

ただし、このソリューションは、が何であるかを簡単に確認しないと意味がない場合がありjava.util.Dateます。 Dates物事ですが、それらがどのように提示されるかは、それらが何であるかとは離婚しています。

いつでも、Dateその瞬間を説明するインスタンスが1つあります。そのDateインスタンスをどのように表示するかは一致していません。視聴者が話す言語、居住国、国が課した規則(夏時間)、および文化的背景が以前に行ったことに大きく依存します。

そのため、aDateには単一の関連するプレゼンテーションはありません。そのため、0日(エポックと呼ばれる)からのミリ秒を取得することを除いて、すべての「get theX」メソッドDateは非推奨になりました(Xは日、月、時間、年など)。

したがって、適切に提示されるすべてのものについて、言語、国、タイムゾーン、および文化的先例に固有Dateの使用ルールに変換する必要があります。Stringこれらのルールを理解して適用するオブジェクトはDateFormatです。

つまり、取得したら、2つの日付が同じである必要があるため(同じロケールの場合)Date、再フォーマットして再解析する必要はありません。Date

于 2012-04-20T14:31:42.790 に答える
0

yyyy-mm-ddフォーマットされている文字列からフォーマットでyyyymmdd日付を取得する方法の例を教えてください

オブジェクトには、関連付けられたDateフォーマットがありません。内部的には、通常、long値を格納するだけです。

他の方法で日付の印刷を行う場合、残念ながら、結果の出力のフォーマット方法を制御することはできません。

于 2012-04-20T14:19:29.877 に答える
0

よくわかりますか?

パラメータとしてDateのみを受け入れるメソッドがあり、そのメソッドは内部的にtoString()を使用してDateを間違った形式の文字列に変換しますか?

そのメソッドを変更し、toString()の使用をSimpleDateFormat.format()と交換するのが最善です。

そのメソッドを変更できない場合は、OOで「ごまかす」ことができます。つまり、toStringメソッドを独自の実装に置き換えます(例:次のように)。

public class MyDate {
   private static final FMT = SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH);

   MyDate(long time) {
      super(time);
   }

   String toString() {
      return FMT.format(this);
   }
}

そして、あなたはあなたのメソッドを呼び出します

xxx = myMethod(new MyDate(new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate).getTime()));

しかし、そのメソッドが内部でtoStringを使用せず、間違った形式のSimpleDateFormatを使用している場合、私の命題は機能しません。

于 2012-04-20T14:50:42.853 に答える
-2

文字列の日付が常に前述の形式である場合は、subStringメソッドを使用して年、月、日を抽出できます。

文字列trDate="20120106";

文字列にsubStringメソッドを使用して、年、月、日を抽出します

文字列年="2012";
文字列月="01";
文字列日="06";

そして、これらを整数に解析します。文字列から整数への解析を行うと仮定します

int intYear = 2012;
int intMonth = 01;
int intDay = 06;

カレンダーcalendar=new GregorianCalendar(intYear、intMonth-1、intDay);

日付日付=新しい日付(カレンダー);

于 2012-04-20T15:29:51.920 に答える