1

Imagine two widgets:

DateTime dtDate = new DateTime(parent, SWT.BORDER);

and

DateTime dtTime = new DateTime(parent, SWT.BORDER | SWT.TIME);

Would would be the most efficient way to read date and time from the two widgets into a single Date variable?

Edit: The following solution that I have in mind is far from being elegant. I hope that there is a better way to do this.

final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// year
dateString += String.valueOf(dtDate .getYear());
dateString += "-";
// month
dateString += String.valueOf(dtDate .getMonth());
dateString += "-";

// day
dateString += String.valueOf(dtDate .getDay());
dateString += " ";

// hour
dateString += String.valueOf(dtTime.getHours());
dateString += ":";

// minute
dateString += String.valueOf(dtTime.getMinutes());
dateString += ":";

// second
dateString += String.valueOf(dtTime.getSeconds());

try {
    Date startDate = (Date) dateFormat.parse(dateString);
    } catch (ParseException exception) {
    exception.printStackTrace();
    }
BanzaiTokyo
  • 1,376
  • 4
  • 17
  • 33

1 Answers1

2

For Java 8 and later you can use LocalDateTime:

LocalDateTime dateTime = 
   LocalDateTime.of(dtDate.getYear(), dtDate.getMonth() + 1, dtDate.getDay(), dtTime.getHours(), dtTime.getMinutes(), dtTime.getSeconds());

The JFace data binding uses Calendar:

Calendar cal = Calendar.getInstance();
cal.clear();

cal.set(Calendar.YEAR, dtDate.getYear());
cal.set(Calendar.MONTH, dtDate.getMonth());
cal.set(Calendar.DAY_OF_MONTH, dtDate.getDay());

cal.set(Calendar.HOUR_OF_DAY, dtTime.getHours());
cal.set(Calendar.MINUTE, dtTime.getMinutes());
cal.set(Calendar.SECOND, dtTime.getSeconds());

Date date = cal.getTime();
greg-449
  • 109,219
  • 232
  • 102
  • 145
  • Much of the java.time functionality built into Java 8 and later is back-ported to Java 6 & 7 in [ThreeTen-Backport](http://www.threeten.org/threetenbp/) and further adapted to [Android](https://en.wikipedia.org/wiki/Android_(operating_system)) in [ThreeTenABP](https://github.com/JakeWharton/ThreeTenABP) (see [*How to use…*](http://stackoverflow.com/q/38922754/642706)). – Basil Bourque Sep 28 '16 at 19:45