Android:如何以用户的语言获取当周的当前日期(星期一等)?

Reg*_*_AG 68 java android localization date internationalization

我想以用户的本地语言知道本周的当前日期(星期一,星期二......).例如,"Lundi""Mardi"等...如果用户是法国人.

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

更一般地说,如何用用户的语言记录一周中的所有日子和一年中的所有月份?

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

谢谢 !!

小智 147

使用SimpleDateFormat将日期和时间格式化为人类可读的字符串,与用户区域设置相关.

获取当周当天的小例子(例如"星期一"):

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);
Run Code Online (Sandbox Code Playgroud)

  • 从SimpleDateFormat文档:_对于格式化,如果模式字母的数量是4或更多,则使用完整的表单; 否则,如果可用,则使用简短或缩写形式_....这意味着当我使用此代码时,我得到**Mon**而不是**Monday**.如果您想要完整表格,请使用"EEEE"[link](http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html) (4认同)

alm*_*oft 24

试试这个:

int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);  
String weekday = new DateFormatSymbols().getShortWeekdays()[dayOfWeek];
Run Code Online (Sandbox Code Playgroud)


gsw*_*ski 15

缩短你可以使用这个:

android.text.format.DateFormat.format("EEEE", date);
Run Code Online (Sandbox Code Playgroud)

它将以星期几的形式返回星期几.


Cra*_*ind 14

我知道已经回答了,但是谁会像这样寻找'Fri'

为周五 -

SimpleDateFormat sdf = new SimpleDateFormat("EEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);
Run Code Online (Sandbox Code Playgroud)

谁想要完整的日期字符串,他们可以在星期五使用4E

星期五 -

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);
Run Code Online (Sandbox Code Playgroud)

请享用...


Kni*_*edi 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);
}
Run Code Online (Sandbox Code Playgroud)


Sil*_*uti 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 + "");
Run Code Online (Sandbox Code Playgroud)

结果是...... 在此输入图像描述

快乐的编码.....


Bas*_*que 5

tl; dr

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

java.time

内置于Java 8及更高版本中并返回到Java 6&7Android的java.time类包括了方便的DayOfWeek枚举。

根据标准ISO 8601定义对日期进行编号,周一至周日为1-7。

DayOfWeek dow = DayOfWeek.of( 1 );
Run Code Online (Sandbox Code Playgroud)

该枚举包括getDisplayName生成当天本地翻译名称的字符串的方法。

Locale对象指定要在翻译中使用的人类语言,并指定文化规范以决定诸如大写和标点符号之类的问题。

String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
Run Code Online (Sandbox Code Playgroud)

要获取今天的日期,请使用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 ) ;
Run Code Online (Sandbox Code Playgroud)

请记住,区域设置与时区无关。两个独立的正交问题。您可能想用法语演示一个在印度(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 );
Run Code Online (Sandbox Code Playgroud)

输出:samedi


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

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

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

在哪里获取java.time类?