Java - 将String变量转换为Date +以MM / dd / yyyy格式获取今天的日期

时间:2014-02-20 01:43:57

标签: java date datetime

快速背景:

我在Eclipse中为预订应用程序创建了一个GUI。在它上面,我有多个组合框用于到达和离开日期(月,日,年 - 两者)。我检索了信息并将其绑定到String变量,因此它看起来像这样:12/04/2014。

问题:

  1. 为了进行比较,将该字符串(到达/离开)转换为日期日期类型的好方法是什么?我需要确认抵达时间不是在今天的日期之前,并确定逗留时间。
  2. 检索今天日期的好方法是什么 - 2014年2月19日。
  3. 我一直在网上搜索很长一段时间,但似乎找不到任何清楚的东西。

    请不要推荐任何附加组件或界面工具,因为我必须手动编写所有内容,只提供现成的内容(如果有意义的话)。

    谢谢!

    ---编辑---

    我尝试了很多下面提到的事情......

    1. '今天的日期=新的日期()'在新的日期()下给我一条红线,要求参数为int或long。

    2. 以下是我从组合框中汇总日期时的代码。 dateFormat.parse(holder)获得一个红色下划线,提示使用try / catch添加throws声明或环绕声。以下变量的数据类型是... index(int)。 holder(String)。到达/离开(java.util.Date) - 无论出于何种原因,即使使用导入日期也不会接受日期,尽管它在我的酒店类中。奇怪,是的,但不是我的主要焦点。

          // Assignments
      index = view.getArriveMonthIndex() + 1; // Arrival date
      holder = index + "/" + view.getArriveDay() + "/" + view.getArriveYear();
      arrival = dateFormat.parse(holder);
      
      index = view.getDepartMonthIndex() + 1; // Departure date
      holder = index + "/" + view.getDepartDay() + "/" + view.getDepartYear();
      departure = dateFormat.parse(holder);
      
    3. 还有其他的东西可能会提及/显示..在我课程的最开始,这是我一直在玩/尝试过的。

      DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
      Calendar todaysDate = Calendar.getInstance();
      String today = dateFormat.format(todaysDate.getTime());
      

      ^^刚刚测试了最后一部分,它确实有效。

      我继续为我的到达/离开变量加下划线的建议。我的方法现在抛出ParseException。还没有找到一个好的描述 - 这究竟是什么意思? (非常新的,如果你不能告诉) - 备份。将其改回原来的状态。这种方式需要在我调用reserveHotel()方法时抛出/捕获。

4 个答案:

答案 0 :(得分:1)

您应该使用原始Date对象作为UI组件中模型的数据,并使用渲染器显示数据的值,最好是尊重用户的区域设置。

这样,您就不必在数据类型之间进行转换

仔细查看How to Use Combo Boxes了解更多详情

例如......

List of dates

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestCombos {

    public static void main(String[] args) {
        new TestCombos();
    }

    public TestCombos() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                DefaultComboBoxModel model = new DefaultComboBoxModel();
                Calendar cal = Calendar.getInstance();
                for (int index = 0; index < 100; index++) {
                    model.addElement(cal.getTime());
                    cal.add(Calendar.DATE, 1);
                }

                JComboBox comboBox = new JComboBox(model);
                comboBox.setRenderer(new DefaultListCellRenderer(){
                    @Override
                    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                        if (value instanceof Date) {
                            value = DateFormat.getDateInstance(DateFormat.SHORT).format((Date)value);
                        }
                        return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                    }
                });
                comboBox.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        Object value = ((JComboBox)e.getSource()).getSelectedItem();
                        if (value instanceof Date) {
                            System.out.println("You have selected a Date value of " + value);
                        } else {
                            System.out.println("You selected something else");
                        }
                    }
                });

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                frame.add(comboBox);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

今天的日期就像new Date()

一样简单

答案 1 :(得分:1)

尝试使用SimpleDateFormat类指定日期掩码(“MM / dd / yyyy”)并将字符串转换/解析为Date

然后与创建为Date

Date dt = new Date ();进行比较

请参阅http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#after(java.util.Date)

答案 2 :(得分:0)

您可以使用以下内容将字符串解析为日期:

Date date = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(YOURDATE);

您可以使用以下内容获取今天的日期:

Date date = new Date();

答案 3 :(得分:0)

使用像这样的java SimpleDateFormat

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy");
String dateString = "12/04/2014";
Date myDate = simpleDateFormat.parse(dateString);

今天的日期可以通过以下方式获得:

Date today = new Date();