使用此代码:
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
现在我想从这里提取日(星期日/星期一)和月。
答案 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)
如果您的日期和时间用于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 类,该类在几年前取代了可怕的旧日期时间类,例如Date
和SimpleDateFormat
。
您的代码忽略了时区的关键问题。当您省略特定区域或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
方法将日期的名称翻译成Locale
或Locale.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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance 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中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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(上下文,“日期”);