String Date Java

只愿长相守 提交于 2020-01-06 08:13:59

问题


// Im new to java programming

I have a String object that represents a date/time in this format : "2013-06-09 14:20:00" (yyyy-MM-dd HH:mm:ss)

I want to convert it to a Date object so i can perform calculations on it but im confused on how to do this.

I tried :

String string = "2013-06-09 14:20:00";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(string);
System.out.println(date);
//Prints Mon Dec 31 00:00:00 GMT 2012

Any help appreciated

Ok so I have now updated my code to as follows i'm getting the correct date/time now when I print the date but is this the correct implementation :

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String string = "2013-06-09 14:20:00";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(string);
System.out.println(dateFormat.format(date));
//prints 2013-06-09 14:20:00

Thx to everyone that's answered/commented thus far


回答1:


The format is wrong. Use this instead:

"yyyy-dd-MM HH:mm:ss"

Indeed your last program version is ok, except you don't need to declare the SimpleDateFormat twice. Simply:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = "2013-06-09 14:20:00";
Date date = dateFormat.parse(string);
System.out.println(dateFormat.format(date));



回答2:


String string = "2013-06-09 14:20:00";

and the DATE object format is "yyyy-dd-MM HH:mm:ss"

You can get Date,Day,month and many more by using Date object which is present in

java.util.Date package , like as follows.

Date d = new Date(string);

This will call constructor of Date object for which you are passing 'string' variable which contains date.

d.getDay(); // retrieve day on that particular day

d.getDate(); // retrieve Date

and many more are avaiable like this.




回答3:


Using java.util.Date

The answer by zzKozak is correct. Well, almost correct. The example code omits required exception handling. Like this…

java.text.DateFormat dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = "2013-06-09 14:20:00";
Date date = null;
try {
    date = dateFormat.parse(string);
} catch ( ParseException e ) {
    e.printStackTrace();
}
System.out.println("date: " + dateFormat.format(date));

Don't Use java.util.Date!

Avoid using java.util.Date & Calendar classes bundled with Java. They are notoriously bad in both design and implementation.

Instead use a competent date-time library. In Java that means either:

  • The third-party open-source Joda-Time
  • In the forthcoming Java 8, the new java.time.* classes defined by JSR 310 and inspired by Joda-Time.

Time Zone

Your question and code fail to address the issue of time zones. If you ignore time zones, you'll get defaults. That may cause unexpected behaviors when deployed in production. Better practice is to always specify a time zone.

Formatter

If you replace a space with a 'T' per the standard ISO 8601 format, then you can conveniently feed that string directly to a constructor of a Joda-Time DateTime instance.

If you must use that string as-is, then define a formatter to specify that format. You can find many examples of that here on StackOverflow.com.

Example Code

Here is some example code using Joda-Time 2.3, running in Java 7.

I arbitrarily chose a time zone of Montréal.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

// Specify a time zone rather than rely on default.
// Necessary to handle Daylight Saving Time (DST) and other anomalies.
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );

DateTime dateTime = new DateTime( "2013-06-09T14:20:00", timeZone ); // Or pass DateTimeZone.UTC as time zone for UTC/GMT.

System.out.println( "dateTime: " + dateTime );

When run…

dateTime: 2013-06-09T14:20:00.000-04:00


来源:https://stackoverflow.com/questions/16998909/string-date-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!