SimpleDateFormat:
SimpleDateFormat pdf = new SimpleDateFormat("MM dd yyyy hh:mm:ss:SSSaa");
Run Code Online (Sandbox Code Playgroud)
抛出的异常pdf.parse("Mar 30 2010 5:27:40:140PM");:
java.text.ParseException: Unparseable date: "Mar 30 2010 5:27:40:140PM"
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:感谢快速解答.你们都是对的,我只是错过了SimpleDateFormat文档中的一个关键句子 - 我应该把它称为一天.
我对这一小段代码有疑问
SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
String str = "2010-03-13 01:01:22";
Date date = sf.parse(str);
SimpleDateFormat f = new SimpleDateFormat("d MMM yyyy hh:mm aaa");
System.out.println(" Date " + f.format(date));
Run Code Online (Sandbox Code Playgroud)
输出:
Date 13 Jan 2010 01:01 AM
Run Code Online (Sandbox Code Playgroud)
代码似乎很好,但我仍然得到月份名称错误.请帮忙 !!谢谢.
我有一个日期字符串,格式如下:
Thu Oct 20 14:39:19 PST 2011
我想使用DateFormat解析它以获取Date对象.我正在尝试这样:
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
Date date = df.parse(dateString);
Run Code Online (Sandbox Code Playgroud)
这给出了ParseException("不可解析的日期").
我也试过这个:
SimpleDateFormat df = new SimpleDateFormat("EEE-MMM-dd HH:mm:ss z yyyy");
Run Code Online (Sandbox Code Playgroud)
结果相同.
这是正确的SimpleDateFormat字符串吗?有没有更好的方法来解析这个日期?
我试着用这个SimpleDateFormat类来做这个,但是我没有找到任何在一天之后放置'st'的选项.我只能得到 '2000年12月31日'
如何格式像"2000年12月31日".我的日期是毫秒.
在java中是否有任何API可以让我们以这种方式格式化日期?
使用SimpleDateFormat,如何解析字符串:"2013-05-23T09:18:07 pm.380 + 0000"
我的所有SimpleDateFormat字符串都在"pm"部分绊倒.
提前致谢.
编辑:我们无法控制进入的格式.
我试过了:
"yyyy-MM-dd'T'HH:mm:ss a.a..SSSZ"
"yyyy-MM-dd'T'HH:mm:ss aaaa.SSSZ"
"yyyy-MM-dd'T'HH:mm:ss a.'m'..SSSZ"
"yyyy-MM-dd'T'HH:mm:ss a.'m.'.SSSZ"
"yyyy-MM-dd'T'HH:mm:ss a.'m..'SSSZ"
"yyyy-MM-dd'T'HH:mm:ss aa'm'..SSSZ"
"yyyy-MM-dd'T'HH:mm:ss aa'm.'.SSSZ"
"yyyy-MM-dd'T'HH:mm:ss aaa'..'SSSZ"
"yyyy-MM-dd'T'HH:mm:ss aaa.'.'SSSZ"
"yyyy-MM-dd'T'HH:mm:ss aaa'.'.SSSZ"
Run Code Online (Sandbox Code Playgroud) 我们有一些像这样的现有代码:
DateFormat[] dateFormats = {
new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH),
new SimpleDateFormat("d MMM yyyy HH:mm:ss Z", Locale.ENGLISH)
};
Run Code Online (Sandbox Code Playgroud)
出于线程安全的原因,我尝试将其转换为使用Joda Time的格式化程序,因此:
DateTimeFormatter[] dateFormats = {
DateTimeFormat.forPattern("EEE, d MMM yyyy HH:mm:ss Z")
.withLocale(Locale.ENGLISH)
.withOffsetParsed(),
DateTimeFormat.forPattern("d MMM yyyy HH:mm:ss Z")
.withLocale(Locale.ENGLISH)
.withOffsetParsed()
};
Run Code Online (Sandbox Code Playgroud)
但是,我发现现有的测试案例已经破裂,这令我感到惊讶.特别是(至少导致测试失败的第一行):
String dateString = "Wed, 1 Feb 2006 21:58:41 +0000";
Run Code Online (Sandbox Code Playgroud)
DateFormat愉快地匹配逗号后面的两个或多个空格,但DateTimeFormatter只按字面意思匹配单个空格.
我可能会添加一个额外的格式,允许额外的空间,但是这样做有点可怕,那么是否有一些方法可以自定义DateTimeFormatter以使空格更加轻松?
这是我原来的代码 -
String dateString = "23 Dec 2015 1:4 PM";
Locale locale = new Locale("en_US");
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm a");
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm a", locale);
Date date = null;
try {
date = formatter.parse(dateString);
} catch (ParseException e) {
LOGGER.error(e);
}
String newDate = df.format(date);
System.out.println("oldDate = " + dateString);
System.out.println("newDate = " + newDate);
Run Code Online (Sandbox Code Playgroud)
这是我的输出 -
oldDate = 23 Dec 2015 1:4 PM
newDate = 23 Dec 2015 01:04 AM …Run Code Online (Sandbox Code Playgroud) 我在20160327020727使用格式解析日期时遇到异常yyyyMMddhhmmss.请注意,lenient设置为false.
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmss");
df.setLenient(false);
try {
Date dt = df.parse("20160327020727");
} catch (ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
它使用相同的格式解析其他日期,并且按预期工作.为什么会这样?
如何检查字符串是否包含此表单的日期:
2012年1月15日星期日美国东部时间下午7:36
我正在使用的数据包含大量字符串.但我正在寻找的字符串类型包含2或3个字的名称和日期.我正在检查日期以识别这些类型的字符串.
我已经为这种类型的日期找到了simpleDateFormat.
String string1 = "Rahul Chowdhury Sunday, January 15, 2012 at 7:37pm EST";
String string2 = "Aritra Sinha Nirmal Friday, April 1, 2016 at 10:16pm EDT";
SimpleDateFormat format = new SimpleDateFormat("EEEEE, MMM dd, yyyy 'at' hh:mmaa z");
Run Code Online (Sandbox Code Playgroud)
但我不知道如何继续前进.
我猜测正则表达式可能有效,但我不知道如何实现这个,当月/日的名称长度不同时.即'May'比'December'短得多.
我想知道是否有使用正则表达式的解决方案或更简单的解决方案.
我知道还有其他线程提出类似的问题,但他们没有回答我的问题.
给出以下代码:
[...]
public void testFormatDateString() throws ParseException {
String dateString = new java.util.Date().toString();
System.out.println(dateString);
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z YYYY", Locale.ENGLISH);
Date date = format.parse(dateString);
System.out.println(date.toString());
}
[...]
Run Code Online (Sandbox Code Playgroud)
之前:
Sat Aug 19 18:26:11 BST 2017
后:
Sat Jan 07 17:26:11 GMT 2017
为什么日期改变了?
simpledateformat ×10
java ×9
date ×6
android ×1
date-format ×1
date-parsing ×1
format ×1
formatting ×1
java-8 ×1
jdk1.6 ×1
jodatime ×1
parsing ×1
regex ×1
string ×1