Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置日期格式,然后从String-Java转换为日期格式_Java_Date_Type Conversion_Date Format_Simpledateformat - Fatal编程技术网

设置日期格式,然后从String-Java转换为日期格式

设置日期格式,然后从String-Java转换为日期格式,java,date,type-conversion,date-format,simpledateformat,Java,Date,Type Conversion,Date Format,Simpledateformat,我这样做是为了设置一个日期格式,然后将其转换为日期数据类型,但它并没有给出预期的结果 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String cur_date=dateFormat.format(new Date()); myDb.setDOB(formatter.parse(cur

我这样做是为了设置一个日期格式,然后将其转换为日期数据类型,但它并没有给出预期的结果

 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
 DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
 String cur_date=dateFormat.format(new Date());
 myDb.setDOB(formatter.parse(cur_date));
场景是:我希望将当前日期转换为yyyy/mm/dd,然后将其传递到setDOB(日期)

编辑:添加结果结果为2013年1月1日星期二00:08:00 IST

伙计们!我没有使用“mm”,这里我只是错误地用日期格式写了mm,它也是mm

再次编辑首先我刚刚使用了setDOB(new Date());但是遇到了格式问题

然后,我使用SimpleDataFormat.format设置yyyy/MM/dd,但它返回使用的字符串


DateFormat.parse将其转换回日期类型。

您没有使用相同的格式。案子很重要!“MM”表示月份,“MM”表示分钟。

问题是您的MM格式

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
DateFormat formatter = new SimpleDateFormat("yyyy/mm/dd");
  • MM是一个月
  • 嗯是分钟
有关详细格式,请参阅。所以应该是,

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");

您正在使用不同的日期字符串模式。MM表示月份,MM表示分钟(参见)


您的setDOB正在接受一个日期对象。我不明白为什么在方法调用中将日期作为参数时,您可能希望格式化日期。通常,当需要在某个地方呈现/存储日期时,需要格式化日期。

+1 mael首先发现格式问题,但是

Date
是自历元(1970年1月1日-2001年1月GMT)以来毫秒数的容器,它不关心值的格式

例如,下面的

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
Date now = new Date();
String cur_date = dateFormat.format(now);

try {
    System.out.println("Now = " + now);
    System.out.println("cur_date = " + cur_date);
    System.out.println("dateFormat.parse(cur_date) = " + dateFormat.parse(cur_date));
} catch (ParseException exp) {
    exp.printStackTrace();
}
输出

Now = Thu Aug 01 18:08:39 EST 2013
cur_date = 2013/08/01
dateFormat.parse(cur_date) = Thu Aug 01 00:00:00 EST 2013
因此,这样做可能会丢失有关日期的重要数据


将格式设置留待您想显示值的时候,而不是存储值的时候(如果可以的话)

听起来您希望有一个日期“知道”它的格式。没有。
Date
对象仅包含自Unix纪元以来的毫秒数。它不知道时区、日历或字符串格式。只是约会而已

因此,您的代码应该是:

myDb.setDOB(new Date());

。。。然后在任何显示它的地方处理它的格式。

formatter.parse用于解析字符串日期,它返回日期对象。 日期表示为日期对象或毫秒,例如自1970年1月1日00:00:00 GMT以来。
我不明白你到底在干什么。日期对象始终以上述格式表示

这个问题和其他答案都使用了麻烦的旧日期时间类,这些类现在是遗留的,被java.time类取代

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
DateFormat formatter = new SimpleDateFormat("yyyy/mm/dd");
LocalDate
显然,您需要一个仅日期值

该类表示一个仅限日期的值,不包含一天中的时间和时区

时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

生成字符串 要生成表示该
LocalDate
值的字符串,只需调用
toString()
。该方法生成标准格式的字符串

2017-01-23

所需的格式与此相近,使用斜杠字符代替连字符。我建议尽可能坚持使用标准格式。但是如果你坚持的话,只需替换字符即可

String output = today.toString().replace( "-" , "/" );
对于其他格式,请使用
DateTimeFormatter
类。并注意该类在生成字符串时自动本地化的能力


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)。看

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可能会在这里找到一些有用的类,例如、、和。

它给出了什么结果?不确定为什么要转换日期->字符串->日期。为什么不先用日期呢?唯一的效果是你结束的日期的时间是00:00,有更简单的方法来实现这一点。@Qwerky你能告诉我如何从日期中删除时间吗?是否只获取YY/MM/dd格式的日期?如果确实要删除时间,请查看
日历
类,该类允许您设置小时和分钟。然而,正如其他人所回答的那样,最好在数据库中存储准确的日期,然后在显示它时对其进行格式化。不幸的是,db处理不在我的范围内,其他人正在处理它。+1用于此解释。格式化日期+解析输出可能会丢失数据。如果您看到我得到的代码new date(),我也会这样做,但我想将其格式化为yyyy/MM/dd,因此我使用简单的格式化程序,但它返回字符串,因此我必须使用DateFormat.format将其转换回日期。。。我该怎么办?我没有,我在这里错写了“mm”
String output = today.toString().replace( "-" , "/" );