【发布时间】:2019-01-29 16:58:17
【问题描述】:
如何从这种日期格式“Wed Jan 30 00:00:00 GMT+02:00 2019”获取名称日名称,例如(星期三 - 星期四)
【问题讨论】:
-
你所拥有的看起来像一个老式的
Date对象。这是你所拥有的吗?还是你提到的格式的字符串?
标签: android calendar date-format
如何从这种日期格式“Wed Jan 30 00:00:00 GMT+02:00 2019”获取名称日名称,例如(星期三 - 星期四)
【问题讨论】:
Date 对象。这是你所拥有的吗?还是你提到的格式的字符串?
标签: android calendar date-format
看来你得到的是java.util.Date 类的一个实例。这是一个设计不佳且早已过时的类,因此首先要看看您是否可以避免这种情况,并使用现代 Java 日期和时间 API java.time 中的类的实例来代替。
但是,如果您从旧 API 获得 Date,而您现在无法更改或不想更改,则首先要将其转换为现代的 Instant,然后从那里执行进一步的转换。下面的 sn-p 使用 ThreeTenABP,更多内容如下。
Date yourOldfashionedDate = getFromLegacyApi();
Instant modernInstant = DateTimeUtils.toInstant(yourOldfashionedDate);
String dayName = modernInstant.atZone(ZoneId.systemDefault())
.getDayOfWeek()
.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
System.out.println("Day name is " + dayName);
给定日期的输出:
日期名称是星期三
如果你得到的是一个String(可能在某个时候从Date.toString返回一个字符串),你需要先解析它:
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
String dateString = "Wed Jan 30 00:00:00 GMT+02:00 2019";
ZonedDateTime dateTime = ZonedDateTime.parse(dateString, dateFormatter);
String dayName = dateTime.getDayOfWeek()
.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
你看到最后一点和之前一模一样。
是的,java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少 Java 6。
yourOldfashionedDate.toInstant() 而不是DateTimeUtils.toInstant(yourOldfashionedDate)。org.threeten.bp 导入日期和时间类以及子包。java.time。java.time。java.time 的反向移植到 Java 6 和 7(JSR-310 的 ThreeTen)。【讨论】:
您可以使用SimpleDateFormat 来表示全天名称的格式部分是EEEE。
希望对您有所帮助!
【讨论】:
SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API 和它的DateTimeFormatter 中做得更好。是的,您可以在 Android 上使用它。对于较旧的 Android,请参阅 How to use ThreeTenABP in Android Project。
您需要首先使用SimpleDateFormat 将String 解析为Calendar 对象:
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
try {
cal.setTime(sdf.parse("Wed Jan 30 00:00:00 GMT+02:00 2019"));
} catch (ParseException e) {
// Log invalid date format
}
然后从您的 Calendar 对象中提取日期:
String day = cal.getDisplayName(Calendar.DAY_OF_WEEK,Calendar.LONG,Locale.ENGLISH);
【讨论】:
SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API 和它的DateTimeFormatter 中做得更好。是的,您可以在 Android 上使用它。对于较旧的 Android,请参阅 How to use ThreeTenABP in Android Project。
## 在这里,我附上了一个可以给你预期输出的方法##
public void dayName(){
String weekDay,time;
SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE MMM dd HH:mm", Locale.US);
SimpleDateFormat dayFormat1 = new SimpleDateFormat("hh:mm yyyy", Locale.US);
dayFormat.setTimeZone(TimeZone.getTimeZone("ITC"));
dayFormat1.setTimeZone(TimeZone.getTimeZone("GMT"));
Calendar calendar = Calendar.getInstance();
weekDay = dayFormat.format(calendar.getTime());
time=dayFormat1.format(calendar.getTime());
Log.e(TAG, "dayName: "+weekDay+" GMT+"+time );// out put looks like : Tuesday Jan 29 17:58 GMT+05:58 2019
}
【讨论】:
SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API 和它的DateTimeFormatter 中做得更好。是的,您可以在 Android 上使用它。对于较旧的 Android,请参阅 How to use ThreeTenABP in Android Project。