0

是否可以使用日期格式化程序格式化字符串类型的日期?我想将我的日期和时间作为字符串存储在事件类中,这样我就不需要将从 MYSQL 数据库加载的字符串(使用日期和时间类型)转换回日期类型,以便它们可以存储在新事件中对象。MySQL 只接受格式为的日期YYYY-MM-DD和时间的格式,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

4 回答 4

1

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

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

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

于 2013-05-31T01:40:05.337 回答
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
} 
于 2013-05-31T01:43:23.547 回答
0

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

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
于 2013-05-31T01:29:12.303 回答
0

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

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

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

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

Date date = df.parse(dateStr);
于 2013-05-31T01:36:47.787 回答