使用Formatter Java格式化String类型的日期

时间:2013-05-31 01:26:44

标签: java jdbc

是否可以使用日期格式化程序格式化String类型的日期?我想将我的日期和时间作为字符串存储在Event类中,这样我就不需要将从MYSQL数据库加载的字符串(使用类型DATE和TIME)转换回Date类型,这样它们就可以存储在新事件中对象。 MySQL只接受YYYY-MM-DD和TIME格式的DATE,格式为HH:MM:SS,但我想在我的程序中打印出来时格式不同。

当我运行此代码时,我收到Cannot format given Object as a Date at java.text.DateFormat.format(Unknown Source)错误。如果我尝试使用parse(),它将无法编译,因为它只接受日期。

主要课程

public Main() {
   ArrayList<Event> events = new ArrayList<Event>();
   private SimpleDateFormat timeFormat = new SimpleDateFormat("HH:MM:SS");
   private SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-DD");

   //Stores current time and date
   Date date;
   Date time;
   String d = "";
   String t = "";           

   d= dateFormat.parse(date);
   t= timeFormat.parse(time);

   events.add(d, t);

   //Print out newly formatted date and time when loaded from mysql
   System.out.println(events.get(0).printDate());
   System.out.println(events.get(0).printTime());
}

活动类

public class Event {    
   private String date;
   private String time;

   public Event(String d, String t) {
      date = d;
      time = t;
   }

   public String printDate() {
       SimpleDateFormat format = new SimpleDateFormat("DD/MM/YYYY");
       String newDate = format.format(date);
       return newDate;
   }

   public String printTime() {
       SimpleDateFormat format = new SimpleDateFormat("HH:mm");
       String newTime = format.format(time);
       return newTime;
   }
}

4 个答案:

答案 0 :(得分:1)

在事件中,您应该使用日期类型作为日期和时间字段。

这是日期和时间值的更合适的表示。使用它们,您可以使用DateFormat来执行您想要的任何格式化

(使用Joda time LocalDate和LocalTime作为你的日期和时间会更好,但这有点偏离主题)

答案 1 :(得分:1)

您无法设置日期格式,因为它们是String个对象,SimpleDateFormat需要Date个对象。 您应该考虑另一种存储方式(DateCalendar)。见下文:

public class Event
{    
   private Date date;
   private Date time;

   public Event(String d, String t)
   {
      String[] details = d.split("\\-");

      Calendar c = Calendar.getInstance();
      c.set(Integer.parseInt(details[0]), Integer.parseInt(details[1]), Integer.parseInt(details[2]));

      date = c.getTime();

      details = t.split(":");
      c.set(Integer.parseInt(details[0]), Integer.parseInt(details[1]), Integer.parseInt(details[2]));

      time = c.getTime();
   }

   public String printDate()
   {
          SimpleDateFormat format = new SimpleDateFormat("dd/MM/YYYY");
          String newDate = format.format(date);
          return newDate;
   }
   // rest of you class can stay the way it is
} 

答案 2 :(得分:0)

检查javadoc以获取正确的格式代码。试试这个:

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");

答案 3 :(得分:0)

您可以使用日期格式化程序格式化java.util.Date或java.sql.Date(它是java.util.Date的子类),例如:

DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
String dateStr = df.format(date);

使用jdbc ResultSet getDate()方法,您可以获取java.sql.Date对象,您可以使用上述方法以任何格式打印

类似的技术也可用于将任何格式的字符串解析为java.util.Date对象

Date date = df.parse(dateStr);