Android:如何以用户的语言获取星期几(星期一等)?


80

我想知道用户本地语言的星期几(星期一,星期二...)。例如,如果用户是法语,则为“ Lundi”,“ Mardi”等。

我已经阅读了这篇文章,但是它只返回一个int,而不是用用户语言显示的日期字符串:在Android中获取星期几的最简单方法是什么?

更一般而言,您如何获得以用户语言编写的一周中的每一天和一年中的所有月份?

我认为这是可能的,例如Google议程提供了用用户本地语言写的日期和月份。

谢谢 !!

Answers:


167

使用SimpleDateFormat相对于用户区域设置将日期和时间格式化为人类可读的字符串。

获取星期几(例如“ Monday”)的小例子:

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];

嗨,如果您使用的是平日,则只显示一个字母。但是我需要显示一天的前三个字母
sankar muniyappa '18

请注意,要使用所有可用的语言环境,应该使用DateFormatSymbols.getInstance()(尽管目前可能会得到相同的结果)。
user905686 '19

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);

请享用...


我在第二行收到错误消息,说构造函数日期未定义。

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 ) ;

请记住,区域设置与时区无关。两个独立的正交问题。您可能希望用法语对印度(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框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

在哪里获取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 + "");

结果是... 在此处输入图片说明

快乐的编码。


3

抱歉,我们将延迟回复。但这将正常工作。

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)此解决方案已包含在接受的Answer中。说明您如何增加价值或删除。(2)这些类现在是遗留的,由java.time类取代。
罗勒·布尔克

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(也在问题中使用)。
Ole VV
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.