public Tarefa(String nome, String descricao, String data, String hora)
			throws Exception {
		this.nome = nome;
		if (nome.isEmpty()) {
			throw new NomeNullException("Nome é obrigatório");
		}
		this.descricao = descricao;
		this.dataCriacao = new GregorianCalendar();
		this.Concluida = false;

		if (data.isEmpty()) {
			dataTarefa = null;
		} else {
			if (!data.matches("\\d\\d/\\d\\d/\\d\\d\\d\\d")
					|| !hora.matches("\\d\\d:\\d\\d")) {
				throw new IllegalArgumentException(
						"Formato de data ou hora inválidos");
			}
			if (hora.isEmpty()) {
				dataTarefa = new GregorianCalendar(Integer.parseInt(data
						.substring(6, 10)), Integer.parseInt(data.substring(3,
						5)), Integer.parseInt(data.substring(0, 2)));

			} else {
				dataTarefa = new GregorianCalendar(Integer.parseInt(data
						.substring(6, 10)), Integer.parseInt(data.substring(3,
						5)), Integer.parseInt(data.substring(0, 2)),
						Integer.parseInt(hora.substring(0, 2)),
						Integer.parseInt(hora.substring(3, 5)));
			}
			if (dataCriacao.after(dataTarefa)) {
				throw new DataException(
						"A data não pode ser anterior a data atual");
			}
		}
	}