Android:ユーザーの言語で現在の曜日(月曜日など)を取得するにはどうすればよいですか?


80

ユーザーの現地語で現在の曜日(月曜日、火曜日...)を知りたい。たとえば、ユーザーがフランス語の場合、「Lundi」、「Mardi」など。

この投稿を読みましたが、intのみが返され、ユーザーの言語の曜日を含む文字列は返されません。Androidで現在の曜日を取得する最も簡単な方法は何ですか?

より一般的には、ユーザーの言語で書かれたすべての曜日とすべての月をどのように取得しますか?

たとえば、Googleアジェンダでは、ユーザーの現地の言語で書かれた日と月が示されているため、これは可能だと思います。

ありがとう!

回答:


168

SimpleDateFormatを使用して、ユーザーのロケールに関して、日付と時刻を人間が読める文字列にフォーマットします。

現在の曜日(「月曜日」など)を取得するための小さな例:

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

31

これを試して:

int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);  
String weekday = new DateFormatSymbols().getShortWeekdays()[dayOfWeek];

こんにちは、平日を使用している場合は1文字しか表示されません。ただし、最初の3文字を表示する必要があります
sankarmuniyappa18年

使用可能なすべてのロケールにアクセスするには、使用する必要があることに注意してくださいDateFormatSymbols.getInstance()(ただし、今のところ、同じ結果が得られる可能性があります)。
user9056 8619年

20

私はすでに答えていることを知っていますが、「金」を探しているこのようないる人

金のために-

SimpleDateFormat sdf = new SimpleDateFormat("EEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

完全な日付文字列が必要な場合は、金曜日に4Eを使用できます

金曜日-

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

楽しい...


コンストラクターの日付が未定義であるというエラーが2行目に表示されます。

17

物事を短くするにはこれを使用できます:

android.text.format.DateFormat.format("EEEE", date);

曜日を文字列として返します。


11

彼女は私が日の名前を取得するために使用したものです(0-6意味monday - sunday):

public static String getFullDayName(int day) {
    Calendar c = Calendar.getInstance();
    // date doesn't matter - it has to be a Monday
    // I new that first August 2011 is one ;-)
    c.set(2011, 7, 1, 0, 0, 0);
    c.add(Calendar.DAY_OF_MONTH, day);
    return String.format("%tA", c);
}

public static String getShortDayName(int day) {
    Calendar c = Calendar.getInstance();
    c.set(2011, 7, 1, 0, 0, 0);
    c.add(Calendar.DAY_OF_MONTH, day);
    return String.format("%ta", c);
}

6

tl; dr

String output = 
    LocalDate.now( ZoneId.of( "America/Montreal" ) )
             .getDayOfWeek()
             .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

java.time

Java 8以降に組み込まれ、Java 6および7Androidバックポートされたjava.timeクラスには、便利なDayOfWeek列挙型が含まれています。

日は、標準のISO 8601定義に従って番号が付けられ、月曜日から日曜日は1〜7です。

DayOfWeek dow = DayOfWeek.of( 1 );

この列挙型には、getDisplayNameその日のローカライズされた翻訳名の文字列を生成するメソッドが含まれています。

このLocaleオブジェクトは、翻訳に使用される人間の言語を指定し、大文字と句読点などの問題を決定するための文化的規範を指定します。

String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

今日の日付を取得するには、LocalDateクラスを使用します。日付は世界中で変化するため、タイムゾーンは非常に重要です。

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
DayOfWeek dow = today.getDayOfWeek();
String output = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

ロケールはタイムゾーンとは何の関係もないことに注意してください。2つの別個の直交する問題。インドでゾーン化された日時のフランス語のプレゼンテーションが必要になる場合があります(Asia/Kolkata)。

ジョーダタイム

更新:現在メンテナンスモードになっているJoda -Timeプロジェクトは、java.timeクラスへの移行をアドバイスしてます。

ジョダタイムライブラリが提供Locale日時値の駆動型局在を。

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone );

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter formatterUnJourQuébécois = DateTimeFormat.forPattern( "EEEE" ).withLocale( locale );

String output = formatterUnJourQuébécois.print( now );

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

出力:samedi


java.timeについて

java.timeフレームワークは、Java8以降に組み込まれています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスjava.util.DateCalendar&を、SimpleDateFormat

ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。

詳細については、Oracleチュートリアルを参照してください。そして、StackOverflowで多くの例と説明を検索してください。仕様はJSR310です。

java.timeクラスはどこで入手できますか?


5

これを試して...

//global declaration
private TextView timeUpdate;
Calendar calendar;

.......

timeUpdate = (TextView) findViewById(R.id.timeUpdate); //initialize in onCreate()

.......

//in onStart()
calendar = Calendar.getInstance();
//date format is:  "Date-Month-Year Hour:Minutes am/pm"
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy HH:mm a"); //Date and time
String currentDate = sdf.format(calendar.getTime());

//Day of Name in full form like,"Saturday", or if you need the first three characters you have to put "EEE" in the date format and your result will be "Sat".
SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE"); 
Date date = new Date();
String dayName = sdf_.format(date);
timeUpdate.setText("" + dayName + " " + currentDate + "");

結果は... ここに画像の説明を入力してください

幸せなコーディング.....


4

返信が遅くなってすみませんが、これで問題なく動作します。

daytext=(textview)findviewById(R.id.day);

Calender c=Calender.getInstance();
SimpleDateFormat sd=new SimpleDateFormat("EEEE");
String dayofweek=sd.format(c.getTime());


daytext.setText(dayofweek);

2
(1)この解決策は、承認された回答ですでにカバーされいます。あなたがどのようにさらなる価値を追加するか、または削除するかを説明してください。(2)これらのクラスはレガシーになり、java.timeクラスに取って代わられました。
バジルバーク2017年

1

Kotlinでこのソリューションを使用しています。

 var date : String = DateFormat.format("EEEE dd-MMM-yyyy HH:mm a" , Date()) as String


0
//selected date from calender
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); //Date and time
String currentDate = sdf.format(myCalendar.getTime());

//selcted_day name
SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE");
String dayofweek=sdf_.format(myCalendar.getTime());
current_date.setText(currentDate);
lbl_current_date.setText(dayofweek);

Log.e("dayname", dayofweek);

1
それは読めません。そして、あなたは不十分に設計されたクラスと長い間時代遅れのSimpleDateFormatDateそしてCalendar(質問でも使用されています)を使用しています。
OleVV19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.