2

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

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

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

如果有人能举例说明如何从格式中获取格式dateyyyy-mm-dd我将不胜感激?stringyyyymmdd

4

4 回答 4

7

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

好的,所以您使用的 API 需要一个字符串,它表示格式为的日期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 需要 a java.util.Date,那么您就不需要做那么多了。你实际上java.util.Date只有两行

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

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

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

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

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

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

于 2012-04-20T14:31:42.790 回答
0

你能给我一个例子,说明如何yyyy-mm-dd从格式中的字符串中获取yyyymmdd格式中的日期吗

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

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

于 2012-04-20T14:19:29.877 回答
0

我很好理解吗?

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

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

如果你不能修改那个方法,那么你可以用 OO “作弊”,即用你自己的实现替换 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,那么我的提议就行不通了。

于 2012-04-20T14:50:42.853 回答
-2

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

字符串 trDate="20120106";

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

字符串年份 = "2012";
字符串月份=“01”;
字符串日=“06”;

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

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

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

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

于 2012-04-20T15:29:51.920 回答