2011-07-22 26 views
17

私はint年、int月、int日Javaで、どのように日の名前を見つけるには?これにはすでにいくつかの機能がありますか?年、月、日で日の名前を見つける

+2

あなたが最もあなたを助けた答えを受け入れる必要があり、あなたの答えを発見した場合。 – RMT

答えて

5

Calendarオブジェクトを使用してこれを見つけることができます。あなたはswitchステートメントlike soを使用することができます

あなたはカレンダーのインスタンスを作成したら、あなたは、あなたがそこから一日を見つけることができます(intです)DAY_OF_WEEKを取得)

import java.util.*; 

public class DayOfWeek { 

    public static void main(String[] args) { 
     Calendar cal = Calendar.getInstance(); 
     int day = cal.get(Calendar.DAY_OF_WEEK); 
     System.out.print("Today is "); 
     switch (day) { 
      case 1: 
       System.out.print("Sunday"); 
       break; 
      case 2: 
       System.out.print("Monday"); 
       break; 
      case 3: 
       System.out.print("Tuesday"); 
       break; 
      case 4: 
       System.out.print("Wednesday"); 
       break; 
      case 5: 
       System.out.print("Thursday"); 
       break; 
      case 6: 
       System.out.print("Friday"); 
       break; 
      case 7: 
       System.out.print("Saturday"); 
     } 
     System.out.print("."); 
    } 
} 
+0

とそれはあなたにintを与えます、 – Bozho

+0

という名前は英語ではありません。ドイツ語はどうですか? – Bozho

+0

@Bozho言語を変更することもできますし、国際化することもできますので、ロケールを選択して好きな言語に設定してください – RMT

8

コンストラクトA年、月、日のGregorianCalendarを照会して、その日の名前を検索します。このような何か:曜日はロケールの曜日の表現でその日のを表すintとして返されること

int year = 1977; 
int month = 2; 
int dayOfMonth = 15; 
Calendar myCalendar = new GregorianCalendar(year, month, dayOfMonth); 

int dayOfWeek = myCalendar.get(Calendar.DAY_OF_WEEK); 

注意。 IEは、平日が月曜日に開始し、日曜日に終了するロケールでは、2は火曜日を表し、ロケールの平日が日曜日に始まる場合、同じ2は月曜日を表します。

編集

そして起こって解答編集の多くがあるので、私は以下を追加することができます:

正直であると考え
DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault()); 
String dayOfMonthStr = symbols.getWeekdays()[dayOfMonth]; 

、私は、より良いSimpleDateFormatterアプローチが好き私が上に示したのとまったく同じコードをカプセル化しているからです。愚かな私はそれについてすべてを忘れる。

+1

注意:月は0ベースで、3月15日です! (2月ではない) –

+0

私は私の例で3月のIdesを目指していた; P – Perception

+0

多分、私はまだそれを知らないいくつかのプログラマーがいると確信しています! –

9

ロケールごとの曜日の名前は異なります。だから適切なロケールでDateFormatを使用する必要があります。例えば:

SimpleDateFormat format = new SimpleDateFormat("EEEE"); 
System.out.println(format.format(date)); 

Dateオブジェクトは、廃止予定Date(..)コンストラクタを含む、複数の方法でCalendar.set(..)方法またはJodaの時間DateTimeを得ることができます。 (後者のためにあなたが使用することができますジョダタイムのは、自身のDateTimeFormat

あなたの数、 Calendar.SUNDAY == 1Calendar.MONDAY == 2を与える
1
new GregorianCalendar().setTime(new Date()).get(DAY_OF_WEEK) 

、...

1

はい、それはJDKとかなり長いプロセスです。 JodaTime(私はそれを使用していない)より良い選択かもしれません。

まず、Calendarオブジェクトを取得します。これにより、日/月/年/時間帯の日付を作成できます。推奨されないDateコンストラクタのいずれかを使用しないでください。

次に、そのカレンダーからDateオブジェクトを取得し、SimpleDateFormatに渡します。書式オブジェクトはスレッドセーフではありません。

// by default, this Calendar object will have the current timezone 
    Calendar cal = GregorianCalendar.getInstance(); 
    cal.set(2011, 6, 22); 

    // this formatter will have the current locale 
    SimpleDateFormat format = new SimpleDateFormat("EEEE"); 

    System.out.println(format.format(cal.getTime())); 
+0

注:カレンダーでは、月はゼロベースです。 7は7月ではなく8月に等しい。 – BalusC

+0

@BalusC - 真、編集済み。私はめったにそのメソッドをメインラインコードで使っていますが、単体テストでは常にそれを焼き付けています。私は例を実行したときに出てきたものにもっと注意を払う必要がありました。 – parsifal

12

thisのように、異なるロケールの曜日の名前を取得できます。

ここで重要な部分です:

DateFormatSymbols dfs = new DateFormatSymbols(usersLocale); 
String weekdays[] = dfs.getWeekdays(); 

これと組み合わせることができます。

String nameOfDay = weekdays[day]; 
3
Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.DAY_OF_MONTH, 22); //Set Day of the Month, 1..31 
cal.set(Calendar.MONTH,6); //Set month, starts with JANUARY = 0 
cal.set(Calendar.YEAR,2011); //Set year 
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); //Starts with Sunday, 6 = friday 
34

用途:あなたが探しているものを取得するには

Calendar cal = Calendar.getInstance(); 
int day = cal.get(Calendar.DAY_OF_WEEK); 

は、パターンがの曜日の名前を取得します。

// Assuming that you already have this. 
int year = 2011; 
int month = 7; 
int day = 22; 

// First convert to Date. This is one of the many ways. 
String dateString = String.format("%d-%d-%d", year, month, day); 
Date date = new SimpleDateFormat("yyyy-M-d").parse(dateString); 

// Then get the day of week from the Date based on specific locale. 
String dayOfWeek = new SimpleDateFormat("EEEE", Locale.ENGLISH).format(date); 

System.out.println(dayOfWeek); // Friday 

これは素晴らしいJavaクラスにまとめられています。

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.*; 


public class DateUtility 
{ 

    public static void main(String args[]){ 
     System.out.println(dayName("2015-03-05 00:00:00", "YYYY-MM-DD HH:MM:ss")); 
    } 

    public static String dayName(String inputDate, String format){ 
     Date date = null; 
     try { 
      date = new SimpleDateFormat(format).parse(inputDate); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return new SimpleDateFormat("EEEE", Locale.ENGLISH).format(date); 
    } 
} 
+0

+2もし私ができる... –

+1

受け入れられた答えである必要があります! 'java.text.ParseExceptionをインポートすることを忘れないでください。 import java.text.SimpleDateFormat; import java.util。*; ' –

0

Joda-Timeライブラリを使用すると、この種の日時作業が簡単になります。シンプルな1ライナー。

String dayOfWeek = new LocalDate(2014, 1, 2).dayOfWeek().getAsText(java.util.Locale.ENGLISH); 

System.out.println("dayOfWeek: " + dayOfWeek); 

実行...

dayOfWeek: Thursday 
関連する問題