How to parse a date?
我试图用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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=
ps.我是从
不能期望使用使用其他格式设置的simpledateformat分析日期。
要分析您的"Thu Jun 18 20:56:02 EDT 2009"日期字符串,您需要这样的简单日期格式(大致):
1 |
使用它将字符串解析为日期,然后使用其他simpledateformat将该日期转换为所需的格式。
1 2 3 4 5 6 7 | 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
问题是您的日期格式如下:
1 | Thu Jun 18 20:56:02 EDT 2009 |
但使用的是
1 | yyyy-MM-dd |
这两种格式不一致。您需要构造一个与要解析为日期的字符串的布局相匹配的
1 2 | EEE MMM dd HH:mm:ss zzz yyyy Thu Jun 18 20:56:02 EDT 2009 |
检查我链接到的javadoc页面,看看字符是如何使用的。
我们现在有了一种更现代的方法来完成这项工作。
Java.时间JavaTimeFrand与Java 8和以后绑定。见教程。这些新类受jsr310定义的joda time的启发,并由threeten额外项目扩展。它们对麻烦的旧类Java.UTI.Deal/Calm等有很大的改进。
注意,像
顺便说一下,注意java.time在默认情况下是如何使用iso8601格式生成字符串的,但是通过在括号中附加时区的名称进行扩展的。
1 2 3 |
转储到控制台。
1 |
运行时。
zdt : 2009-06-18T20:56:02-04:00[America/New_York]
调整时区
为了好玩,让我们调整一下印度时区。
1 | ZonedDateTime zdtKolkata = zdt.withZoneSameInstant ( ZoneId.of ("Asia/Kolkata" ) ); |
zdtKolkata : 2009-06-19T06:26:02+05:30[Asia/Kolkata]
转换为J.U.日期
如果您真的需要java.util.date对象用于尚未更新为java.time类型的类,请转换。请注意,您将失去分配的时区,但将相同的时间自动调整为UTC。
GetSelectedDate怎么样?不管怎样,特别是在代码问题上,问题在于这一行:
1 |
构造函数中的字符串必须与日期的格式匹配。如何做到这一点的文档就在这里。看起来你需要一些接近"eee-mmm-d-hh:mm:ss-zzz-yyyy"的东西。
回应:"如何将9月13日2016日下午6点00分GMT-0500(Hora de verano中心(MexxCo))转换成Java中的DD My YY?",它被标记为如何复制
试试这个:对于
1 2 3 4 5 6 7 8 9 10 | 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); } |