java.time
使用现代的Java日期和时间API java.time,当您了解如何时,它就非常简单:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"MMM-dd-uuuu HH:mm:ss.SSS zzz(xx)",Locale.ROOT);
String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
LocalDate date = LocalDate.parse(dd,formatter);
System.out.println(date);
输出为:
2019-11-08
我们可以看到,您的字符串采用UTC。我假设您也希望以UTC约会。否则,我们需要解析为ZonedDateTime
,转换为所需的区域,然后仅将日期格式化为所需的输出格式。
我假设UTC(+0000)
是时区的缩写,后跟方括号。
您尝试使用的日期和时间类Date
和SimpleDateFormat
的设计很差,而且已经过时了,后者尤其麻烦。您不应该使用它们。 java.time非常适合使用。
您的代码出了什么问题?
-
MM
代表两位数的月份数字,例如11代表11或8代表08。对于Nov
之类的月份缩写,您需要MMM
。
-
Z
用于偏移量,例如+0000
。尽管它确实出现在您的字符串中,但文本UTC
在它之前。编辑:令人困惑的SimpleDateFormat
将UTC
解析为时区,然后忽略字符串的其余部分。就我而言,我不希望依靠这种行为。
- 我建议您使用格式化程序指定一个语言环境,以控制它在字符串中期望的语言。使用
MMM
表示月份缩写,如果您使用默认语言环境并且恰好是威尔士语,那么格式化程序将期望Tach
表示11月。
链接
,
请勿使用传统的SimpleDateFormat
和Date
类,请使用Java-8现代日期时间API类,首先使用输入格式date创建DateTimeFormatter
String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM-dd-uuuu HH:mm:ss.SSS zzz(Z)");
然后使用OffsetDateTime
解析具有特定偏移量(以您的情况为UTC)
OffsetDateTime dateTime = OffsetDateTime.parse(dd,formatter);
然后获取LocalDate
System.out.println(dateTime.toLocalDate());
,
您在SimpleDateFormatter类构造函数中提供的模式应与提供的输出匹配。
例如由于您将月份作为三个字母提供,因此请在模式中使用3 M。
String dd = "Nov-08-2019 07:00:28";
Date date = null;
try {
date = new SimpleDateFormat("MMM-dd-yyyy HH:mm:ss").parse(dd);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String newstr = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println("\n"+newstr+"\n");
}
,
我可以通过更改以下格式来修复它:
"MMM-dd-yyyy HH:mm:ss.SSS Z"
这也可以处理毫秒。
希望这会有所帮助。祝你好运。
,
String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
Date date = null;
try {
date = new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss.S z").parse(dd);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String newstr = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println("\n"+newstr+"\n");
这可能会对您有所帮助。
,
您输入的字符串是
String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
您想要的是
yyyy-MM-dd
首先,您不可能因为该代码而获得yyyy-MMM-dd
String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
Date date = null;
try {
date = new SimpleDateFormat("MMM-dd-yyyy HH:mm:ss Z").parse(dd);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String newstr = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println("\n"+newstr+"\n");
,
“ Nov”被称为“ MMM”格式,因此它将引发异常。
尝试使用以下代码:https://onlinegdb.com/H1keFI5oS
import java.util.Date;
import java.text.SimpleDateFormat;
public class Main
{
public static void main(String []args){
String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
Date date = null;
try {
date = new SimpleDateFormat("MMM-dd-yyyy HH:mm:ss").parse(dd);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String newstr = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println("\n"+newstr+"\n");
}
}
本文链接:https://www.f2er.com/3105446.html