如何parsingdate?
我想用SimpleDateFormatparsing这个date,它不工作: 
 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); } } 
 如果我用strDate = "2008-10-14"试这个代码,我有一个肯定的答案。 有什么问题? 我怎样才能parsing这种格式? 
  PS。 我从jDatePicker得到这个date,并没有指示如何修改用户selectdate时得到的date格式。 
你不能期望用一个不同格式的SimpleDateFormatparsingdate。
为了parsing你的“Thu Jun 18 20:56:02 EDT 2009”datestring,你需要这样一个SimpleDateFormat(大致):
 SimpleDateFormat parser=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy"); 
使用这个将stringparsing成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); ... 
JavaDoc: http : //docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
问题是你有一个像这样格式化的date:
 Thu Jun 18 20:56:02 EDT 2009 
 但是使用的SimpleDateFormat是: 
 yyyy-MM-dd 
 这两种格式不一致。 您需要构build一个SimpleDateFormat ,它与您试图parsing为Date的string布局相匹配。 为了使事情变得容易,你需要一个SimpleDateFormat像这样: 
 EEE MMM dd HH:mm:ss zzz yyyy Thu Jun 18 20:56:02 EDT 2009 
检查我链接到的JavaDoc页面,看看如何使用字符。
我们现在有一个更现代的方式来做这个工作。
java.time
java.time框架与Java 8及更高版本捆绑在一起。 参见教程 。 这些新课程受JSR 310定义的Joda-Time的启发,并由ThreeTen-Extra项目扩展。 它们是对麻烦的旧类java.util.Date/.Calendar等的巨大改进。
 请注意,像EDT这样的3-4字母代码既不标准也不唯一。 尽可能避免使用它们。 学习使用ISO 8601标准格式。  java.time框架可能会在翻译时遇到困难,但是许多常用的代码都有重复的值。 
顺便提一下,请注意,默认情况下,java.time是如何使用ISO 8601格式生成string的,但通过在括号中附加时区名称进行扩展。
 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 ); 
转储到控制台。
 System.out.println ( "zdt : " + zdt ); 
运行时。
zdt:2009-06-18T20:56:02-04:00 [America / New_York]
调整时区
为了好玩,让我们调整到印度时区。
 ZonedDateTime zdtKolkata = zdt.withZoneSameInstant ( ZoneId.of ( "Asia/Kolkata" ) ); 
zdtKolkata:2009-06-19T06:26:02 + 05:30 [Asia / Kolkata]
转换为juDate
如果你真的需要一个java.util.Date对象来使用尚未更新到java.timetypes的类,请转换。 请注意,您正在丢失指定的时区,但自动调整为UTC 。
 java.util.Date date = java.util.Date.from( zdt.toInstant() ); 
如何getSelectedDate ? 无论如何,特别是在你的代码问题上,问题是这一行:
 new SimpleDateFormat("yyyy-MM-dd"); 
构造函数中的string必须与date的格式相匹配。 如何做到这一点的文件在这里 。 看起来你需要接近“EEE MMM d HH:mm:ss zzz yyyy”
回复:“ 如何将2016年9月13日星期二00:00:00 GMT-0500(Hora de verano central(México))转换为Java中的dd-MM-yy? ”,它被标记为重复
 试试这个:使用java.util.Date , java.text.SimpleDateFormat ,这是一个简单的解决scheme。 
 public static void main(String[] args) throws ParseException { String fecha = "Tue Sep 13 2016 00:00:00 GMT-0500 (Hora de verano central (México))"; Date f = new Date(fecha); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); sdf.setTimeZone(TimeZone.getTimeZone("-5GMT")); fecha = sdf.format(f); System.out.println(fecha); }