编辑:如何更改Date对象的日期格式?

时间:2014-04-13 16:47:36

标签: java android date

我使用此查询在SQLite数据库中创建了表:

create table table_name(
id integer primary key autoincrement,
name varchar(450) not null,
date date)

我正在通过此代码插入值(简化问题):

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date tmpDate = dateFormat.parse("2014/01/12");
values.put(columnKey, tmpDate.toString());
db.insert("table_name", null, values);

从数据库中再次获取行'date'的值后,我收到此错误:

java.text.ParseException: Unparseable date: "Sun Jan 12 00:00:00 EST 2014" (at offset 0)

如果我以格式yyyy / MM / dd保存日期,是否应该以相同的格式存储? 感谢您的建议。

编辑: 我不明白为什么,但在此之后:

DatePicker tmpDatePicker = (DatePicker) dateDialog.findViewById(R.id.date_picker);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date tmpDate = dateForma.parse("2014-01.12");
tmpDate.toString();

产出是2014年1月12日00:00:00。 我该怎么改变它?

2 个答案:

答案 0 :(得分:1)

我明白了。 toString()方法将格式设置为2014年1月12日00:00:00 EST。 要使格式等于SimpleDateFormat构造函数模式中给出的格式,我需要使用它:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date tmpDate = dateFormat.parse("2014-01-12");
dateFormat.format(tmpDate);

输出为2014-01-12

答案 1 :(得分:1)

Your own answer是正确的。

但我必须说java.util.Date,.Calendar和java.text.SimpleDateFormat类是非常麻烦的。大多数人都很乐意避免使用它们,而是使用Joda-Time(或Java 8中的新java.time包,但不使用Android)。

Joda-Time 2.3提供LocalDate课程,仅限日期,没有时间部分或时区。

默认情况下,Joda-Time使用ISO 8601标准方式来格式化日期时间值的字符串表示,显然就是您所寻求的。如果需要,Joda-Time也可以使用本地化或自定义格式。

String input = "2014-01-12";
LocalDate localDate = new LocalDate( input );
String output = localDate.toString();

您可以根据需要为其他类/框架转换为java.util.Date和从java.util.Date转换。

java.util.Date date = localDate.toDate();
String dateAsString = date.toString();

跑步时......

input: 2014-01-12
output: 2014-01-12
dateAsString: Sun Jan 12 00:00:00 PST 2014