从DateTime控件获取日期

时间:2012-10-09 13:20:02

标签: java swt

我知道这可能是一个简单的问题,但我是Java新手,我的经验主要是使用PHP或C#。

我正在开发一个eclipse RCP项目并使用Google Window Builder。

我需要做的就是从名为dateTimeDOB DateTime 控件中获取日期

如果日期或月份值是单个数字,则必须以此格式返回日期(日/月/日),前提是“0”。

我认为DateTime控件类型是

org.eclipse.swt.widgets.DateTime

所以例如:

String strDate = dateTimeDOB.getDate("dd/mm/yyyy");

提前致谢

4 个答案:

答案 0 :(得分:12)

更清洁的方法(恕我直言):

Calendar instance = Calendar.getInstance();
instance.set(Calendar.DAY_OF_MONTH, dateTimeDOB.getDay());
instance.set(Calendar.MONTH, dateTimeDOB.getMonth());
instance.set(Calendar.YEAR, dateTimeDOB.getYear());
String dateString = new SimpleDateFormat("dd/MM/yyyy").format(instance.getTime());

答案 1 :(得分:8)

    DateTime dateTimeDOB = ...

    int day = dateTimeDOB.getDay();
    int month = dateTimeDOB.getMonth() + 1;
    int year = dateTimeDOB.getYear();

    String strDate = (day < 10) ? "0" + day + "/" : day + "/";
    strDate += (month < 10) ? "0" + month + "/" : month + "/";
    strDate += year;

答案 2 :(得分:2)

您还可以查看CDateTime窗口小部件,

Date date = cDateTime.getSelection();

和整体可用性。缺点是它不是SWT的一部分,而是一个额外的库。

答案 3 :(得分:1)

鉴于控件已经分别为您提供了年/月/日,您只需要格式化这些值,您可以使用String.format执行此操作:

String text = String.format("%02d/%02d/%04d",
                            dateTimeDOB.getDay()
                            // getMonth() returns a value in the range [0, 11]
                            dateTimeDOB.getMonth() + 1,
                            dateTimeDOB.getYear());
System.out.println(text); // 03/06/2012 or whatever

请注意,这种格式在美国会被误解,在其他文化中也可能不合适。这是否重要取决于您的应用程序。

根据Tom Seidel的回答,无论是直接从单个值转换为文本还是通过Calendar(或类似类型),部分取决于代码如何挂起。如果您肯定想要从UI控件转换为文本格式,并且中间没有任何代码需要知道这些信息作为日期,那么我写的内容是可以的。但是,如果需要在不同方法之间传递值等,那么将其转换为更自然的数据类型是有意义的。我个人建议使用Joda Time,在这种情况下使用LocalDate类型。这样你除了别的什么之外你不需要担心时区。