将日期对象转换为日历对象 [重复]

Posted

技术标签:

【中文标题】将日期对象转换为日历对象 [重复]【英文标题】:Converting a Date object to a calendar object [duplicate] 【发布时间】:2011-09-05 08:53:54 【问题描述】:

所以我从表单中的传入对象中获取日期属性:

Tue May 24 05:05:16 EDT 2011

我正在编写一个简单的辅助方法来将其转换为日历方法,我使用的是以下代码:

    public static Calendar DateToCalendar(Date date ) 
 
 Calendar cal = null;
 try    
  DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
  date = (Date)formatter.parse(date.toString()); 
  cal=Calendar.getInstance();
  cal.setTime(date);
  
  catch (ParseException e)
  
      System.out.println("Exception :"+e);  
    
  return cal;
 

为了模拟传入的对象,我只是在当前使用的代码中分配值:

private Date m_lastActivityDate = new Date();

但是,一旦方法到达,这会给我一个空指针:

date = (Date)formatter.parse(date.toString()); 

【问题讨论】:

对于迟到的人:我建议您既不要使用Date,也不要使用Calendar。这些课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time API 的InstantZonedDateTime 【参考方案1】:

这是你的方法:

public static Calendar toCalendar(Date date) 
  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  return cal;

你所做的一切都是错误和不必要的。

顺便说一句,Java 命名约定建议方法名称以小写字母开头,因此应该是:dateToCalendartoCalendar(如图所示)。


好的,让我们挤一下你的代码,好吗?

DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
date = (Date)formatter.parse(date.toString()); 

DateFormat 用于将字符串转换为日期 (parse()) 或将日期转换为字符串 (format())。您正在使用它将日期的字符串表示解析回日期。这不可能吧?

【讨论】:

非常感谢伙计。我实际上得到了一个网站的代码。鉴于上述方法的简洁性,我现在开始觉得我的 intToCalendar 方法有点臃肿` public static Calendar intToCalendar(int i) ` Calendar cal = null;尝试 String stringInt = String.valueOf(i); DateFormat 格式化程序 = new SimpleDateFormat("yyyyMMdd");日期日期 = (Date)formatter.parse(stringInt); cal=日历.getInstance(); cal.setTime(日期); catch (ParseException e) System.out.println("Exception :"+e); 返回卡尔; ` @Will a) 不要使用 int,使用 long。日期的值大于 int 可以存储的值。 b) 使用new Date(long) 看起来原始问题中的代码不仅旨在将Date转换为Calendar,而且还同时从日期中删除时间。后者如何正确做可以找到here。不要使用(Date)formatter.parse(date.toString());,而是尝试formatter.parse(formatter.format(date)); 我认为原始代码试图仅解析格式化日期的年月日,以便将日历设置为一天的开始,而不是中间的某个时间日。虽然set(HOUR_OF_DAY, 0) 等更好。【参考方案2】:

只需使用 Apache Commons

DateUtils.toCalendar(Date date)

【讨论】:

【参考方案3】:

这很容易...像这样将日期转换为日历:

Calendar cal=Calendar.getInstance();
DateFormat format=new SimpleDateFormat("yyyy/mm/dd");
format.format(date);
cal=format.getCalendar();

【讨论】:

两年前接受的解决方案是一种更清洁的方法。请注意,此代码有一个隐藏的假设,即与 format 关联的日历对象当前保存着我们刚刚格式化的日期,并且作为没有小时/分钟/秒的日期格式化的副作用,该内部日期也没有小时/分钟/秒。也许,但没有记录的行为。做公认的答案,这直接说明了我们正在尝试做的事情。如果您想删除小时/分钟/秒,请参阅有关如何执行此操作的已接受答案的评论。

以上是关于将日期对象转换为日历对象 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将日期字符串转换为日期或日历对象?

将对象转换为日期时间 [重复]

ASP.NET vb.net 将月/日/年中的日历日期格式转换为具有日/月/年的日期对象

Pandas:无法将对象转换为日期时间 [重复]

将对象转换为数据框列中的日期时间[重复]

将unix时间戳转换为javascript日期对象[重复]