这是一个可能的复制,但我无法弄清楚为什么当指定为MMM时,这个月被返回为零,并且与mm(数字)很好地工作。这里有什么能帮上忙的吗?
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Date;
import java.util.Locale;
public class time1 {
public static void main(String[] args) {
DateFormat originalFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
DateFormat targetFormat = new SimpleDateFormat("yyyy-mm-dd");
Date date = null;
try {
date = originalFormat.parse("26-Aug-2011");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String formattedDate = targetFormat.format(date);
System.out.println("old date: " + date);
System.out.println("new date: " + formattedDate);
}
}产出如下:
旧日期:2011年8月26日星期五
新日期: 2011-00-26
当格式更改为dd-mm-yyyy且日期为26-08-2011时,输出为
旧日期:2011年1月26日:07:00
新日期: 2011-07-26
我无法理解MMM失败的原因,我所有的日期都是格式的(26-8月-2011年),我需要把它们转换成yyyy dd (26-07-2011)。
发布于 2017-09-22 05:18:28
从文档,我可以说
DateFormat targetFormat = new SimpleDateFormat("yyyy-mm-dd");需要更改为
DateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd");
// this gives you the Date in Digits.根据文件,
“m”用于年月,而 “m”用于每小时一分钟。
因此,您的“mm”将返回默认为00:00的分钟,这是您所得到的输出。这将为您提供以下输出。
old date: Fri Aug 26 00:00:00 IST 2011
new date: 2011-08-26发布于 2017-09-22 17:15:07
java.time
您正在使用麻烦的旧日期时间类,这些类现在是遗留的,被java.time类取代。
String input = "26-Aug-2011" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.US ) ;
LocalDate ld = LocalDate.parse( input , f ) ;您想要的YYYY的输出格式恰好符合ISO 8601标准。java.time类在解析/生成字符串时默认使用标准格式。
String output = ld.toString() ;2011-08-26
关于java.time
java.time框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.Date、Calendar和SimpleDateFormat。
尤达-时间项目现在在维护模式中,建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310。
在哪里获得java.time类?
三次-额外项目使用其他类扩展java.time。这个项目是将来可能加入java.time的试验场。您可以在这里找到一些有用的类,如Interval、YearWeek、YearQuarter和更多。
https://stackoverflow.com/questions/46357295
复制相似问题