我使用此查询在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。 我该怎么改变它?
答案 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