从Android中的Date对象获取日月值?

时间:2013-06-19 13:39:50

标签: java android date simpledateformat

使用此代码:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse(dtStart);
return date;

我已按日期对象转换字符串日期并获取值:

  

Sun Feb 17 07:00:00 GMT 2013

现在我想从这里提取日(星期日/星期一)和月。

10 个答案:

答案 0 :(得分:148)

import android.text.format.DateFormat;

String dayOfTheWeek = (String) DateFormat.format("EEEE", date); // Thursday
String day          = (String) DateFormat.format("dd",   date); // 20
String monthString  = (String) DateFormat.format("MMM",  date); // Jun
String monthNumber  = (String) DateFormat.format("MM",   date); // 06
String year         = (String) DateFormat.format("yyyy", date); // 2013

答案 1 :(得分:15)

您可以尝试:

String input_date="01/08/2012";
SimpleDateFormat format1=new SimpleDateFormat("dd/MM/yyyy");
Date dt1=format1.parse(input_date);
DateFormat format2=new SimpleDateFormat("EEEE"); 
String finalDay=format2.format(dt1);

也试试这个:

Calendar c = Calendar.getInstance();
c.setTime(yourDate);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

答案 2 :(得分:4)

到一周的自定义日期,您可以使用此功能

public static String getDayFromDateString(String stringDate,String dateTimeFormat)
{
    String[] daysArray = new String[] {"saturday","sunday","monday","tuesday","wednesday","thursday","friday"};
    String day = "";

    int dayOfWeek =0;
    //dateTimeFormat = yyyy-MM-dd HH:mm:ss
    SimpleDateFormat formatter = new SimpleDateFormat(dateTimeFormat);
    Date date;
    try {
        date = formatter.parse(stringDate);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        dayOfWeek = c.get(Calendar.DAY_OF_WEEK)-1;
        if (dayOfWeek < 0) {
            dayOfWeek += 7;
        }
        day = daysArray[dayOfWeek];
    } catch (Exception e) {
        e.printStackTrace();
    }

    return day;
}

dateTimeFormat例如dateTimeFormat =“yyyy-MM-dd HH:mm:ss”;

答案 3 :(得分:1)

tl; dr

如果您的日期和时间用于UTC:

LocalDateTime               // Represent a date and time-of-day lacking the context of a time zone or offset-from-UTC. Does *NOT* represent a moment.
.parse(                     // Convert from text to a date-time object.
    "2013-02-17 07:00:00" 
    .replace( " " , "T" )   // Comply with standard ISO 8601 format.
)                           // Returns a `LocalDateTime` object.
.atOffset(                  // Determining a moment by assign an offset-from-UTC. Do this only if you are certain the date and time-of-day were intended for this offset.
    ZoneOffset.UTC          // An offset of zero means UTC itself.
)                           // Returns a `OffsetDateTime` object. Represents a moment.
.getDayOfWeek()             // Extract the day-of-week enum object.
.getDisplayName(            // Localize, producing text. 
    TextStyle.FULL ,        // Specify how long or abbreviated.
    Locale.US               // Specify language and cultural norms to use in localization.
)                           // Returns a `String` object.
  

星期天

然后……

…
.getMonth()
.getDisplayName( TextStyle.FULL , Locale.US )
  

2月

java.time

现代解决方案使用的是 java.time 类,该类在几年前取代了可怕的旧日期时间类,例如DateSimpleDateFormat

时区

您的代码忽略了时区的关键问题。当您省略特定区域或UTC偏移量时,将隐式应用JVM当前的默认时区。因此,您的结果可能会有所不同。

相反,请始终在代码中明确指定时区或偏移量。

LocalDateTime

您输入的格式YYYY-MM-DD HH:MM:SS没有时区或UTC偏移量的指示符。

因此,我们必须解析为LocalDateTime

您的输入格式接近LocalDateTime类中默认使用的标准ISO 8601格式。只需用T替换中间的空格即可。

String input = "2013-02-17 07:00:00".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;
  

ldt.toString():2013-02-17T07:00

您现在拥有的LocalDateTime代表 not 是一个时刻,是 not 在时间轴上的一个点。故意缺少时区或偏移量意味着按照定义它不能代表一个时刻。 LocalDateTime代表了大约26-27小时(全球时区范围)内的潜在时刻。

ZonedDateTime

如果您知道某个日期和时间的特定时区,请应用ZoneId以获得ZonedDateTime

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;

有了ZonedDateTime,您现在就有了片刻。

使用DayOfWeek枚举获取星期几。

DayOfWeek dow = zdt.getDayOfWeek() ;

DayOfWeek::getDisplayName方法将日期的名称翻译成LocaleLocale.US之类的Locale.CANADA_FRENCH指定的人类语言。

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

dimanche

或者,使用美国英语。

String output = dow.getDisplayName( TextStyle.FULL , Locale.US ); 
  

星期天

类似月份,请使用Month枚举。

Month m = zdt.getMonth() ;

String output = m.getDisplayName( TextStyle.FULL , Locale.US ); 
  

2月

OffsetDateTime

如果您确定LocalDateTime中的日期和时间是要表示UTC时间,请使用OffsetDateTime类。

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;  // Assign UTC (an offset of zero hours-minutes-seconds). 

MonthDay

如果您希望工作一天零一个月而不需要一年,您可能也对MonthDay类感兴趣。

MonthDay md = MonthDay.from( zdt ) ;

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

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

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

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

答案 4 :(得分:1)

在Kotlin中,您还可以使用此名称获得“当前日期”。 (需要API级别26)

(Calendar.getInstance() as GregorianCalendar).toZonedDateTime().dayOfWeek

答案 5 :(得分:1)

 Calendar calendar = Calendar.getInstance();
   DateFormat date= new SimpleDateFormat("EEEE", Locale.getDefault());
    String dayName= date.format(calendar.getTime()); //Monday
    date= new SimpleDateFormat("dd", Locale.getDefault());
    String dayNumber = date.format(calendar.getTime()); //20
    date= new SimpleDateFormat("MMM", Locale.getDefault());
    String monthName= date.format(calendar.getTime()); //Apr
    date= new SimpleDateFormat("MM", Locale.getDefault());
    String monthNumber= date.format(calendar.getTime()); //04
    date= new SimpleDateFormat("yyyy", Locale.getDefault());
    String year= date.format(calendar.getTime()); //2020

就是这样。享受

答案 6 :(得分:0)

public static String getDayFromStringDate(String stringDate, String dateFormat, boolean abbreviated) throws ParseException {

    String pattern;

    if (abbreviated) {

        pattern = "E"; // For short day eg: Mon,Tue
    } else {

        pattern = "EEEE"; // For compete day eg: Monday, Tuesday
    }

    return new SimpleDateFormat(pattern)
            .format(new SimpleDateFormat(dateFormat).parse(stringDate));
}

例如:如果stringDate:-16/12/2018然后dateFormat:-dd / MM / yyyy

答案 7 :(得分:0)

考虑使用java.util.Calendar类。

String dateString = "20/12/2018";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

Date readDate = df.parse(dateString);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(readDate.getTime());

Log.d(TAG, "Year: "+cal.get(Calendar.YEAR));
Log.d(TAG, "Month: "+cal.get(Calendar.MONTH));
Log.d(TAG, "Day: "+cal.get(Calendar.DAY_OF_MONTH));

答案 8 :(得分:0)

同样在科特林:

    val string = "2020-01-13T00:00:00"
    val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US)
    val date = format.parse(string)

    val day = DateFormat.format("dd", date) as String
    val monthNumber = DateFormat.format("MM", date) as String
    val year = DateFormat.format("yyyy", date) as String

答案 9 :(得分:-1)

selecteddate = "Tue Nov 26 15:49:25 GMT+05:30 2019";

SimpleDateFormat dateUI = new SimpleDateFormat(“ EEEE,dd-MMMM-yyyy”);

字符串日期= dateUI.foramt(selecteddate);

Log.e(上下文,“日期”);