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

时间:2011-10-04 16:41:46

标签: java android date localization internationalization

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

我已经阅读过这篇文章了,但它只返回一个int,而不是一个用用户语言表示日期的字符串:What is the easiest way to get the current day of the week in Android?

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

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

谢谢!

11 个答案:

答案 0 :(得分:135)

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

获取当周当前日期的小例子(例如“星期一”)

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

答案 1 :(得分:23)

试试这个:

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

答案 2 :(得分:15)

缩短时间您可以使用:

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

将以星期几的形式返回星期几。

答案 3 :(得分:13)

我知道已经回答,但是谁在寻找' Fri' 这样的

表示周五 -

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

...享受

答案 4 :(得分: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);
}

答案 5 :(得分: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 + "");

结果是...... enter image description here

快乐的编码.....

答案 6 :(得分:3)

TL;博士

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

java.time

Java 8及更高版本以及back-ported to Java 6 & 7to Android中内置的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-Timemaintenance mode项目建议迁移到java.time类。

Joda-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及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

答案 7 :(得分: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);

答案 8 :(得分:1)

如果您正在使用 ThreetenABP 日期库bt Jake Warthon,则可以执行以下操作:

dayOfWeek.getDisplayName(TextStyle.FULL, Locale.getDefault()

在您的dayOfWeek实例上。更多信息: https://github.com/JakeWharton/ThreeTenABP https://www.threeten.org/threetenbp/apidocs/org/threeten/bp/format/TextStyle.html

答案 9 :(得分: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);

答案 10 :(得分:0)

我只是在Kotlin中使用此解决方案:

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