本问题已经有最佳答案,请猛点这里访问。
我有一个像"2015-07-16 17:07:21"这样的字符串。 我想将其转换为相同格式的日期。 我尝试过这样的事情:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");
Date date = sdf.parse("2015-07-16 17:07:21");
但是输出是不同的格式,例如Thu Jul 16 17:00:21 IST 2015。 我怎样才能使其按需工作。 谁能帮我。 我知道这可能是重复的,但我没有发现任何运气。
日期没有格式,它有一个表示时间点的值。如果要以某种格式显示它,则应使用SimpleDateFormat
我怎样才能做到这一点。您能给我一个例子或链接以供参考吗?
如果您希望将其设置为不同的格式,请使用所需的模式定义另一个SimpleDateformat并使用其设置日期格式。要清楚:您有一种SimpleDateformat解析输入,而另一种则用于打印输出。
至少有两个答案说明了这一点,让我更明确地说:日期不"具有格式"。日期是一个(大)整数,是自过去某个时间以来的毫秒数。 SimpleDateFormat是一种将字符串从特定格式转换为日期(使用parse())或将日期转换为字符串(使用format())的简便方法。
我建议您避免使用SimpleDateFormat类。它不仅已经过时,而且非常麻烦。今天,我们在java.time(现代Java日期和时间API)方面有了很多改进。
从Java API https://docs.oracle.com/javase/8/docs/api/java/util/Date.html
The class Date represents a specific instant in time, with millisecond precision.
尝试了解Date和DateFormat的区别/连接。
public static void main(String [] args) throws ParseException{
String dateString ="2015-07-16 17:07:21";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// use SimpleDateFormat to define how to PARSE the INPUT
Date date = sdf.parse(dateString);
// at this point you have a Date-Object with the value of
// 1437059241000 milliseconds
// It doesn't have a format in the way you think
// use SimpleDateFormat to define how to FORMAT the OUTPUT
System.out.println( sdf.format(date) );
sdf = new SimpleDateFormat();
System.out.println( sdf.format(date) );
// ....
}
输出:(请注意,日期保持不变,只是其表示形式(格式)发生了变化)
2015-07-16 17:07:21
7/16/15 5:07 PM
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());删除语言环境警告。
尝试使用此:
public static void main(String[] args) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateInString ="2015-07-16 17:07:21";
try {
Date date = formatter.parse(dateInString);
System.out.println(date);
System.out.println(formatter.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
}
输出:
Thu Jul 16 17:07:21 IST 2015
2015-07-16 17:07:21
注意:
有关完整的日期和时间模式,请参考此http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
尝试像这样的格式字符串:yyyy-MM-dd HH:mm:ss
M:月,m:分钟
public static void main(String [] args){
String dateString ="2015-07-16 17:07:21";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date;
try {
date = sdf.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
return;
}
System.out.println(sdf.format(date));
System.out.println(dateString.equals(sdf.format(date)));
}
同样,日期没有格式,它具有代表时间点的值。如果要以某种格式显示它,则应使用SimpleDateFormat
我试过了。 它不起作用
sdf.format(date)再次返回String。
参见以下代码:
public static void main(String [] args){
String dateString ="2015-07-16 17:07:21";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date;
try {
date = sdf.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
return;
}
System.out.println(date); // Displays date in it's default format Jul 16 17:00:21 IST 2015
System.out.println(dateString.equals(date)); // Returns false since 'Jul 16 17:00:21 IST 2015' is not equal to dateString (2015-07-16 17:07:21)
}
Date类始终以其默认格式存储日期。 SimpleDateFormat帮助使用其对象格式化日期。它不会对日期类对象进行任何更改。而是将Date class转换为User defined格式,这对Date类对象没有任何影响。我想这很清楚。