更改Java字符串中的日期格式
我有一个代表日期的String
。
String date_s = "2011-01-18 00:00:00.0";
我想将其转换为Date
并以YYYY-MM-DD
格式输出。
2011-01-18
我怎样才能做到这一点?
好的,根据我在下面检索的答案,这里是我尝试过的东西:
String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));
但它输出02011-00-1
而不是2011-01-18
所需的。 我究竟做错了什么?
如果字符串恰好包含时区部分,则使用LocalDateTime#parse()
(或ZonedDateTime#parse()
)将特定模式的String
解析为LocalDateTime
。
String oldstring = "2011-01-18 00:00:00.0";
LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
使用LocalDateTime#format()
(或ZonedDateTime#format()
)将LocalDateTime
格式化为特定模式的String
。
String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(newstring); // 2011-01-18
或者 ,如果您尚未使用Java 8,请使用SimpleDateFormat#parse()
将某个特定模式的String
解析为Date
。
String oldstring = "2011-01-18 00:00:00.0";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring);
使用SimpleDateFormat#format()
将Date
格式化为特定模式的String
。
String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(newstring); // 2011-01-18
也可以看看:
更新 :根据您的失败尝试:模式区分大小写 。 阅读java.text.SimpleDateFormat
javadoc单个部件代表什么。 因此,例如M
代表几个月, m
代表几分钟。 而且,年份有四位数yyyy
,而不是五位yyyyy
。 仔细查看我在上面发布的代码片段。
格式是CASE-SENSITIVE,所以使用MM的月份不是毫米(这是分钟)和YYYY对于参考,您可以使用以下的备忘单。
G Era designator Text AD
y Year Year 1996; 96
Y Week year Year 2009; 09
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day name in week Text Tuesday; Tue
u Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
例子:
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u" 2001-W27-3
答案当然是创建一个SimpleDateFormat对象并使用它来分析字符串到日期并将日期格式化为字符串。 如果您尝试过SimpleDateFormat并且无法正常工作,请显示您的代码以及您可能收到的任何错误。
附录:格式字符串中的“mm”与“MM”不同。 MM用几个月,mm用几分钟。 另外,yyyyy和yyyy不一样。 例如,:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FormateDate {
public static void main(String[] args) throws ParseException {
String date_s = "2011-01-18 00:00:00.0";
// *** note that it's "yyyy-MM-dd hh:mm:ss" not "yyyy-mm-dd hh:mm:ss"
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = dt.parse(date_s);
// *** same for the format String below
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(dt1.format(date));
}
}
链接地址: http://www.djcxy.com/p/18507.html