如何parsingdate?
我想用SimpleDateFormat
parsing这个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); }