0

今はこんな感じで、long日付と時刻の変数があります。そのため、DateFormat を使用してそれ自体の日付と時刻を取得し、今度はそれ自体の年、月、日、時、分を取得したいと考えています。日付と時刻は にあるStringので、実際には文字列を切り取るだけで済みsubstringます。しかし、たとえば、スウェーデンの日付は「dd/mm/yyyy」のようになり、米国の日付は「mm/dd/yyyy」のようになります。したがって、スウェーデンの日付の文字列を切り取ると、日の変数が月になります。

これは私のコードです:

String start = mCursor.getLong(1);

Format df = DateFormat.getDateFormat(this);
Format tf = DateFormat.getTimeFormat(this);

String date = df.format(start);
String time = tf.format(start);

私の質問は、年、月、日、時、分を独自の文字列で取得する方法はありますか?

GuiceU さん、よろしくお願いします。(悪い英語、私は知っています)

4

2 に答える 2

7

I wouldn't do it that way. Use java.util.Calendar:

DateFormat dateFormatter = new SimpleDateFormat("yyyy-MMM-dd");
dateFormatter.setLenient(false);
String dateStr = "2012-Dec-21";
Date date = dateFormatter.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
于 2012-12-21T15:05:10.207 に答える
1

質問と受け入れられた回答の両方がタイムゾーンを無視しているように見えますが、これはおそらく問題です。

この作業は、Joda -Timeまたは Java 8 の新しい java.time.* パッケージを使用すると、はるかに簡単になります。longプリミティブ値があるとのことでしたので、Unix エポック (1970 年) からのミリ秒を表すと仮定して、そこから始めましょう。日付の文字列表現を作成または解析する必要はまったくありません。Joda-Time は、年、月などの数字と名前にアクセスする多くのポイントを提供します。また、Joda-Time は名前をスウェーデン語または英語にローカライズします。

日付スタイル コードは 1 組の文字です。最初の文字は日付のスタイルで、2 番目の文字は時刻のスタイルです。ショートスタイルの場合は「S」、ミディアムスタイルの場合は「M」、ロングスタイルの場合は「L」、フルスタイルの場合は「F」の文字を指定してください。スタイル文字「-」を指定すると、日付または時刻を省略できます。

long input = DateTime.now().getMillis();

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Stockholm" );
DateTime dateTime = new DateTime( input, timeZone );
int year = dateTime.getYear();
int month = dateTime.getMonthOfYear(); // 1-based counting, 1 = January. Unlike crazy java.util.Date/Calendar.
int dayOfMonth = dateTime.getDayOfMonth();
int hourOfDay = dateTime.getHourOfDay();
int minuteOfHour = dateTime.getMinuteOfHour();

java.util.Locale localeSweden = new Locale( "sv", "SE" ); // ( language code, country code );
String monthName_Swedish = dateTime.monthOfYear().getAsText( localeSweden );
String monthName_UnitedStates = dateTime.monthOfYear().getAsText( java.util.Locale.US );

DateTimeFormatter formatter_Sweden = DateTimeFormat.forStyle( "LM" ).withLocale( localeSweden ).withZone( timeZone );
DateTimeFormatter formatter_UnitedStates_NewYork = DateTimeFormat.forStyle( "LM" ).withLocale( java.util.Locale.US ).withZone( DateTimeZone.forID( "America/New_York" ) );
String text_Swedish = formatter_Sweden.print( dateTime );
String text_UnitedStates_NewYork = formatter_UnitedStates_NewYork.print( dateTime );

DateTime dateTimeUtcGmt = dateTime.withZone( DateTimeZone.UTC );

コンソールにダンプ…</p>

System.out.println( "dateTime: " + dateTime );
System.out.println( "monthName_Swedish: " + monthName_Swedish );
System.out.println( "monthName_UnitedStates: " + monthName_UnitedStates );
System.out.println( "text_Swedish: " + text_Swedish );
System.out.println( "text_UnitedStates_NewYork: " + text_UnitedStates_NewYork );
System.out.println( "dateTimeUtcGmt: " + dateTimeUtcGmt );

実行すると…</p>

dateTime: 2014-02-16T07:12:19.301+01:00
monthName_Swedish: februari
monthName_UnitedStates: February
text_Swedish: den 16 februari 2014 07:12:19
text_UnitedStates_NewYork: February 16, 2014 1:12:19 AM
dateTimeUtcGmt: 2014-02-16T06:12:19.301Z
于 2014-02-16T06:10:07.047 に答える