所以我有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}}格式的示例,我真的很感激吗?
答案 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);
日期日期=新日期(日历);