不同格式的Java字符串到日期的转换
所以我有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
的函数
如果有人能举例说明如何从string
格式的yyyymmdd
中获取date
格式的yyyy-mm-dd
,我将不胜感激
# 1 楼答案
Date
对象没有与其关联的格式。在内部,它通常只存储一个long
值如果其他一些方法负责打印日期,那么很遗憾,您无法控制结果输出的格式
# 2 楼答案
我理解得好吗
您有一个只接受日期作为参数的方法,该方法在内部使用toString()将日期转换为错误格式的字符串
最好是修改该方法,并将toString()的用法与SimpleDataFormat交换。格式()
如果你不能修改这个方法,那么你可以用OO“作弊”,也就是用你自己的实现替换toString方法,例如:
你把你的方法称为
但是,如果该方法不在内部使用toString,而是使用错误格式的SimpleDataFormat,那么我的建议就行不通
# 3 楼答案
如果字符串日期总是以您提到的格式出现,那么可以使用子字符串方法提取年、月和日
使用字符串的子字符串方法提取年、月和日
并将其解析为整数。假设您要将字符串解析为整数
# 4 楼答案
---由于评论更新了答案--
好的,所以您使用的API需要一个字符串,它以
2012-04-20
的格式表示日期然后需要解析格式不正确的
Date
,然后以所需的格式再次格式化还请注意,我更改了您的“月”指示符,因为您犯了一个非常常见的错误,使用
m
表示月份。由于“小时:分钟:秒”日期格式有两个常见的“名称”,都以m
、分钟和月份开头。因此,大写M
用于数月,而小写m
用于数分钟。我敢打赌这是你遇到问题的真正原因---原帖如下--
如果你的API需要一个
java.util.Date
,那么你不需要做你已经做的那么多。实际上java.util.Date
只有两行但如果不快速回顾一下
java.util.Date
是什么,这个解决方案可能就没有意义Dates
是事物,但它们的呈现方式与它们的本来面目脱节在任何时刻,都有一个
Date
实例来描述那个时刻。这个例子应该如何呈现并不一致,这在很大程度上取决于观众说什么语言,他们在哪个国家,这个国家实施了什么规则(夏令时),以及他们以前的文化背景因此,
Date
没有单一的关联表示。这就是为什么Date
上的每个“get the X”方法都被弃用的原因(其中X是日、月、小时、年等),除了从0日期(称为历元)获取毫秒之外因此,对于每一个要正确呈现的
Date
,您需要使用特定于语言、国家、时区和文化先例的规则将其转换为String
。理解并应用这些规则的对象是DateFormat
这意味着,一旦你得到了
Date
,你就不需要重新格式化它并重新解析它来得到“正确的”Date
,因为这两个日期应该是相同的(对于相同的语言环境)