fen*_*nec 177 java date simpledateformat
我试图解析这个日期,SimpleDateFormat
它不起作用:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Formaterclass {
public static void main(String[] args) throws ParseException{
String strDate = "Thu Jun 18 20:56:02 EDT 2009";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date dateStr = formatter.parse(strDate);
String formattedDate = formatter.format(dateStr);
System.out.println("yyyy-MM-dd date is ==>"+formattedDate);
Date date1 = formatter.parse(formattedDate);
formatter = new SimpleDateFormat("dd-MMM-yyyy");
formattedDate = formatter.format(date1);
System.out.println("dd-MMM-yyyy date is ==>"+formattedDate);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我用strDate =尝试这个代码"2008-10-14"
,我有一个肯定的答案.有什么问题?我该如何解析这种格式?
PS.我从a获得了这个日期,jDatePicker
没有关于如何修改用户选择日期时获得的日期格式的说明.
jwl*_*jwl 239
您不能期望使用以不同格式设置的SimpleDateFormat来解析日期.
要解析你的"Thu Jun 18 20:56:02 EDT 2009"日期字符串,你需要像这样(大致)的SimpleDateFormat:
SimpleDateFormat parser=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
Run Code Online (Sandbox Code Playgroud)
使用此方法将字符串解析为Date,然后使用其他SimpleDateFormat将该Date转换为所需的格式.
String input = "Thu Jun 18 20:56:02 EDT 2009";
SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
Date date = parser.parse(input);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = formatter.format(date);
...
Run Code Online (Sandbox Code Playgroud)
JavaDoc:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
Edd*_*die 50
问题是您的日期格式如下:
Thu Jun 18 20:56:02 EDT 2009
Run Code Online (Sandbox Code Playgroud)
但是使用的SimpleDateFormat
是:
yyyy-MM-dd
Run Code Online (Sandbox Code Playgroud)
这两种格式不一致.您需要构造一个SimpleDateFormat
匹配您尝试解析为Date的字符串的布局.为了让它更容易看到,你需要SimpleDateFormat
这样的东西:
EEE MMM dd HH:mm:ss zzz yyyy
Thu Jun 18 20:56:02 EDT 2009
Run Code Online (Sandbox Code Playgroud)
检查我链接到的JavaDoc页面,看看如何使用这些字符.
Bas*_*que 17
我们现在有一种更现代的方式来完成这项工作.
该java.time框架捆绑在一起的Java 8及更高版本.请参阅教程.这些新类的灵感来自Joda-Time,由JSR 310定义,并由ThreeTen-Extra项目扩展.它们比麻烦的旧类java(util.Date/.Calendar等)有了很大的改进.
请注意,3-4字母代码EDT
既不标准也不唯一.尽可能避免使用它们.学习使用ISO 8601标准格式.java.time框架可能需要进行翻译,但许多常用代码都有重复的值.
顺便说一下,请注意默认情况下java.time如何使用ISO 8601格式生成字符串,但通过在括号中附加时区名称进行扩展.
String input = "Thu Jun 18 20:56:02 EDT 2009";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "EEE MMM d HH:mm:ss zzz yyyy" , Locale.ENGLISH );
ZonedDateTime zdt = formatter.parse ( input , ZonedDateTime :: from );
Run Code Online (Sandbox Code Playgroud)
转储到控制台.
System.out.println ( "zdt : " + zdt );
Run Code Online (Sandbox Code Playgroud)
跑步时
zdt:2009-06-18T20:56:02-04:00 [America/New_York]
为了好玩,让我们适应印度时区.
ZonedDateTime zdtKolkata = zdt.withZoneSameInstant ( ZoneId.of ( "Asia/Kolkata" ) );
Run Code Online (Sandbox Code Playgroud)
zdtKolkata:2009-06-19T06:26:02 + 05:30 [亚洲/加尔各答]
如果您确实需要一个java.util.Date对象用于尚未更新为java.time类型的类,请转换.请注意,您正在丢失指定的时区,但会自动将其调整为UTC.
java.util.Date date = java.util.Date.from( zdt.toInstant() );
Run Code Online (Sandbox Code Playgroud)
Yis*_*hai 12
getSelectedDate怎么样?无论如何,特别是在你的代码问题上,问题在于这一行:
new SimpleDateFormat("yyyy-MM-dd");
Run Code Online (Sandbox Code Playgroud)
构造函数中的字符串必须与日期的格式匹配.如何做到这一点的文档是在这里.看起来你需要一些接近"EEE MMM d HH:mm:ss zzz yyyy"的东西
归档时间: |
|
查看次数: |
378518 次 |
最近记录: |