6

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

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

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

如果日期或月份值是单个数字,则它必须以这种格式(dd/mm/yyyy)返回日期,它必须有一个前面的“0”。

我认为 DateTime 控件类型是

org.eclipse.swt.widgets.DateTime

例如:

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

提前致谢

4

4 回答 4

13

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

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());
于 2012-10-09T13:47:33.990 回答
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;
于 2012-10-09T13:32:14.950 回答
2

您还可以查看CDateTime您拥有的小部件

Date date = cDateTime.getSelection();

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

于 2012-10-09T15:15:17.287 回答
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类型。这样,您就不必担心时区,除了其他任何事情。

于 2012-10-09T13:55:31.677 回答