Java String to Date以不同格式转换

Rac*_*hel 2 java string formatting date

所以我有String trDate="20120106";并且想要得到Date trDate=2012-01-06并且我正在尝试SimpleDateFormat用于更改模式但首先我得到parse字符串然后生成日期然后尝试调用format哪个给我回字符串但我需要日期,任何建议,这里是代码我有:

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate);
String krwtrDate = new SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH).format(tradeDate);
Date krwTradeDate = new SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH).parse(krwtrDate);
Run Code Online (Sandbox Code Playgroud)

这是类似的问题,但它没有回答我的问题

我需要转换字符串Date format只是因为我需要将它传递给另一个只需要的函数Date object.

真的很感激,如果有人可以给例如如何获得dateyyyy-mm-dd格式与string它是yyyymmdd格式?

Edw*_*uck 7

---由于评论更新答案---

好的,所以您使用的API需要一个String,它表示格式为的Date 2012-04-20

然后,您需要解析Date格式不正确的格式,然后以所需的格式再次格式化.

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH).parse(trDate);
String krwtrDate = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH).format(tradeDate);
Run Code Online (Sandbox Code Playgroud)

还要注意我改变了你的"月份"指示符,因为你犯了一个非常常见m月份使用错误.由于"小时:分钟:秒"日期格式有两个常见的"名称",它们都以m分钟,分钟和月份开头.大写M因此用于个月,而小写m被用于分钟.我敢打赌,这是你遇到问题的真正原因.

---原帖如下---

如果您的API需要a java.util.Date,那么您不需要做任何事情.你实际上java.util.Date只有两条线

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate);
Run Code Online (Sandbox Code Playgroud)

但是,如果不快速回顾一下这些解决方案,这个解决方案可能没有意义java.util.Date. Dates是事物,但它们如何被呈现与它们是分开的.

在任何时候,都有一个Date实例描述了那个时刻.如何Date呈现这种情况并不一致,这在很大程度上取决于观众所说的语言,他们所处的国家,国家实施的规则(夏令时),以及他们之前的文化背景.

因此,a Date没有单独的关联演示.这就是为什么每个"获得X"方法都Date被弃用(其中X是日,月,小时,年等),除了从0日期(称为纪元)获取毫秒之外.

因此,对于每个Date要正确呈现的内容,您需要将其转换String为特定于语言,国家/地区,时区和文化先例的使用规则.了解这些规则并应用它们的对象是DateFormat.

这意味着,一旦你得到它,Date你不需要重新格式化它并重新解析它以获得"正确",Date因为两个日期应该是相同的(对于相同的语言环境).