【问题标题】:Removing time from my Date variable从我的日期变量中删除时间
【发布时间】:2014-04-30 17:48:53
【问题描述】:

我的出生日期变量最初是 int 类型。然后将其解析为 toString() 并使用 simpleDateFormat 解析为 Date。

唯一的问题是它一直返回它的默认时间,包括日期。

public Date getDob(){
    String format = Integer.toString(this.dob);
    try{
        date = new SimpleDateFormat("ddMMyyyy").parse(format);
    }catch(ParseException e){
        return null;
    }
    return date;
}

返回:1999 年 1 月 16 日星期六 00:00:00 CET [我想删除粗体时间]

非常感谢您的帮助!

解决方案:

public String getDob(){
    Date newDate = new Date(this.dob);
    String date = new SimpleDateFormat("E MMM dd").format(newDate);
    return date;
}

【问题讨论】:

  • format的值是多少?
  • 解析dob变量后,String format = "16011999" 16th January 1999

标签: java date datetime


【解决方案1】:

你不能改变Date类的toString()方法,

您正在做的是将一些字符串解析为 Date 并返回 Date 实例并尝试打印它,它在内部调用 DatetoString() 并且它具有固定格式,

您可以使用format() 方法将Date 转换为String 并以您想要的任何格式打印

【讨论】:

  • 更好的解决方案:使用 Joda Time 或 java.time,两者都有一个表示“只是一个日期”的类型
  • 那我该怎么做呢?为了让您了解情况,我基本上是在设计一个非常基本的数据库。 student 构造函数包含 int dob 参数,该参数被解析为字符串,然后格式化为 Data 类型的日期变量。
  • 只需将输入解析为 Date 并在您想要以漂亮格式显示的位置,使用 SimpleDateformat#format()
  • 我设法解决了这个问题,现在正在编辑原帖:-) 谢谢大家
  • 这就是我上面的评论告诉我们的:)
【解决方案2】:

根据定义,java.util.Date 对象具有日期部分和时间部分。

日期时间!= 字符串

了解日期时间对象不是字符串。我们创建包含在日期时间对象中的日期时间值的字符串表示,但这样做会生成一个与日期时间对象完全分开的新字符串对象。

本地日期

如果您只想要一个日期,而没有时间的概念,请使用 Java 8 中 Joda-Time 和新的 java.time package 中的 LocalDate 类(受 Joda-Time 启发)。

乔达时间

默认情况下,Joda-Time 使用ISO 8601 标准格式。如果您想要其他格式的字符串,请探索 DateTimeFormat 类(DateTimeFormatters 的工厂)。

Joda-Time 2.3 中的示例代码。

String input = "01021903"; // First of February, 1903.
DateTimeFormatter formatter = DateTimeFormat.forPattern( "ddMMyyyy" );
LocalDate dateOfBirth = formatter.parseLocalDate( input );
String outputStandard = dateOfBirth.toString();  // By default, the ISO 8601 format is used.
String outputCustom = formatter.print( dateOfBirth );

【讨论】:

  • 谢谢 Basil,抱歉回复晚了。打算试试这个并回复!
  • 非常感谢 Basil,有人告诉我使用 Joda-Time,但它确实让我很困惑。你的例子真的很有帮助,让它完美地工作!祝你有美好的一天
  • @Booch 是的,Joda-Time 有一点学习曲线。 如果您从事任何日期时间的工作,那么值得付出努力Search StackOverflow for "joda" 找到很多例子来快速拉平这条曲线。
  • 再次感谢 Basil :-)
【解决方案3】:

试试这个

Date originalDate = new Date();
long timeInMills = originalDate.getTime();

Date newDate = new Date(timeInMills);
String date = new SimpleDateFormat("E MMM dd").format(newDate);

System.out.println(date);

输出:

Wed Apr 30

如果您想在需要时以长(以毫秒为单位)存储日期。

更多模式请查看SimpleDateFormat

【讨论】:

  • 我不完全确定这是否有效。基本上 dob 是指在我的对象的构造函数中使用的出生日期,从我正在阅读的内容中给出当前日期?
  • 好吧,试试这个!一会儿回来陪你:)
  • 效果很好!然而,我可以用 Joda-Time 输出的格式似乎更整洁。例如 1996/09/02 这正是我想要的!你的代码也很好用:)
  • @Booch 不用担心只是问。
猜你喜欢
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多