Java String to Date以不同格式转换

时间:2012-04-20 14:14:28

标签: java string date formatting

所以我有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);

以下是similar question,但它没有回答我的问题

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

如果有人可以提供date yyyy-mm-dd格式string来自yyyymmdd格式的{{1}}格式的示例,我真的很感激吗?

4 个答案:

答案 0 :(得分:7)

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

好的,所以你使用的API需要一个String,它代表一个格式为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);

另请注意,我更改了您的“月份”指示符,因为您在使用m一个月时遇到了常见的错误。由于“小时:分钟:秒”日期格式有两个常见的“名称”,均以m,分钟和月份开头。因此,大写M使用了几个月,而小写m则用于分钟。我敢打赌,这是你遇到问题的真正原因。

---原帖如下---

如果您的API需要java.util.Date,那么您无需执行任何操作。实际上你只有java.util.Date只有两行

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate);

但如果没有快速回顾一下java.util.Date是什么,这个解决方案可能没有意义。 Dates是事物,但它们的呈现方式与它们的内容是脱节的。

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

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

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

这意味着,一旦获得Date,您就不需要重新格式化它并重新解析它以获得“正确”Date,因为两个日期应该相同(对于同一地区)。

答案 1 :(得分:0)

  

您能举例说明如何以yyyy-mm-dd格式从yyyymmdd格式

获取Date格式的日期

long个对象没有与之关联的格式。在内部,它通常只存储{{1}}值。

如果某些其他方法负责打印日期,那么您遗憾地无法控制如何格式化结果输出。

答案 2 :(得分:0)

我理解得好吗?

你有一个只接受Date作为参数的方法,并且在内部该方法使用toString()将Date转换为格式错误的字符串?

最好是修改该方法并使用SimpleDateFormat.format()交换toString()。

如果你不能修改那个方法,那么你可以用OO“欺骗”,i。即用您自己的实现替换toString方法,例如:

public class MyDate {
   private static final FMT = SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH);

   MyDate(long time) {
      super(time);
   }

   String toString() {
      return FMT.format(this);
   }
}

然后用

调用你的方法
xxx = myMethod(new MyDate(new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate).getTime()));

但是如果该方法在内部不使用toString但是SimpleDateFormat格式错误,那么我的命题就不起作用了。

答案 3 :(得分:-2)

如果字符串日期始终采用您提到的格式,则可以使用subString方法提取年,月和日。

  

String trDate =“20120106”;

使用String的subString方法提取年,月和日

  

String year =“2012”;
  String month =“01”;
  字符串日=“06”;

将这些解析为整数。假设您将字符串解析为整数

  

int intYear = 2012;
  int intMonth = 01;
  int intDay = 06;

     

Calendar calendar = new GregorianCalendar(intYear,intMonth - 1,intDay);

     

日期日期=新日期(日历);