Example usage for org.apache.commons.lang.time DateUtils addDays

List of usage examples for org.apache.commons.lang.time DateUtils addDays

Introduction

In this page you can find the example usage for org.apache.commons.lang.time DateUtils addDays.

Prototype

public static Date addDays(Date date, int amount) 

Source Link

Document

Adds a number of days to a date returning a new object.

Usage

From source file:mitm.common.security.ca.hibernate.CertificateRequestStoreImplTest.java

@Test
public void testUpdate() throws Exception {
    AutoTransactDelegator delegator = AutoTransactDelegator.createProxy();

    Date now = new Date();

    CertificateRequest request = delegator.addRequest(now, null, "test@example.com", 1, null, null, "dummy",
            null, null, null, null);/*from  ww w . ja v a  2s.  c om*/

    assertNotNull(request.getID());
    assertNull(request.getData());
    assertNull(request.getLastUpdated());
    assertNull(request.getLastMessage());

    Date updated = DateUtils.addDays(now, 1);

    delegator.updateRequest(request.getID(), new byte[] { 1, 2, 3 }, updated, "message", null);

    request = delegator.getRequest(request.getID());

    assertEquals("test@example.com", request.getEmail());
    assertTrue(ArrayUtils.isEquals(new byte[] { 1, 2, 3 }, request.getData()));
    assertEquals(updated, request.getLastUpdated());
    assertEquals("message", request.getLastMessage());
}

From source file:mitm.common.security.certificate.GenerateTestCertificates.java

private void generateValidCertificate() throws Exception {
    X509CertificateBuilder certificateBuilder = securityFactory.createX509CertificateBuilder();

    String encodedPrivateKey = "30820276020100300d06092a864886f70d0101010500048202603082025c"
            + "02010002818100a9fee3017954c99b248d1486830c71b2e0ea3f9b7a2763"
            + "1bed8a731f5bd7e1edf856bc3fb7c63dedbeb5bb0de474e7792b3aa7e7b2"
            + "274c03a47c7d89b1935eaef172c6395f2322f1ed9e61ae46d716b4b4394c"
            + "1a802db05a2d7c3d1d41a3e8afc65ff8dada7414744f1ee1540e50ee7fb8"
            + "db437b20c5ee33a82b9d575cfbc951020301000102818004f84ab2b45562"
            + "3f82e60cff91bd3f65b765a1ce6dd7d0f1f413e421ba91a92d47e161478b"
            + "9be41b9b43bce03f199bdad304b7fbf21d6bff7f439477fe150ce38c312f"
            + "c015f3c89291aaa42c4c106f623dfd9f76acad2f1c77b590f038ffbb25f9"
            + "14b6f7ead769808ddd0e2d648442620b50518d9b7fb132b2fa1fa3e9d628"
            + "41024100e69ab3765120d0e0ba5dc21bf384b2f553211b4b1902175454c6"
            + "2f1b0f8ad385d78490539308c9fd5145ae36cc2a6d364fdd97d83d9b6623"
            + "a987db239e716055024100bcb77acf1e9829ab5b2c9a5e73d343db857474"
            + "a529ba52ca256655eb7d760e85d3c68eec9500e3db0494c8f77cb8058593"
            + "6e52a9290149367392d74ecdc3510d024100bd15723b7cb024b56ffabad3"
            + "c26c3774f2b1bdb8690c0ee7060feec6088b737f56450b368be4740332e5"
            + "a8c0a3cdd1f8eba9adfd101ee0b43329036584604075024055465b9a27ea"
            + "fe394e33b375a6c4fa4ec1d943b4364cd9883aaa297d05ee48d5b4426ee6"
            + "fcd5b02091cb619c63a10bedb6170e071e5e5464e4889ffe1e007a290240"
            + "7b60d23994a2ec38db909678446ed56d32455bf684141b9ee0aec68b2025"
            + "1d4d94fd2beebf02074559b811ae1130d2e2aa3bec2e9bccb06969104856" + "00c70759";

    String encodedPublicKey = "30819f300d06092a864886f70d010101050003818d0030818902818100a9"
            + "fee3017954c99b248d1486830c71b2e0ea3f9b7a27631bed8a731f5bd7e1"
            + "edf856bc3fb7c63dedbeb5bb0de474e7792b3aa7e7b2274c03a47c7d89b1"
            + "935eaef172c6395f2322f1ed9e61ae46d716b4b4394c1a802db05a2d7c3d"
            + "1d41a3e8afc65ff8dada7414744f1ee1540e50ee7fb8db437b20c5ee33a8" + "2b9d575cfbc9510203010001";

    PrivateKey privateKey = decodePrivateKey(encodedPrivateKey);
    PublicKey publicKey = decodePublicKey(encodedPublicKey);

    X500PrincipalBuilder subjectBuilder = new X500PrincipalBuilder();

    String email = "test@example.com";

    subjectBuilder.setCommonName("Valid certificate");
    subjectBuilder.setEmail(email);//  w  ww  . j  a va  2s.  com
    subjectBuilder.setCountryCode("NL");
    subjectBuilder.setLocality("Amsterdam");
    subjectBuilder.setState("NH");

    AltNamesBuilder altNamesBuider = new AltNamesBuilder();
    altNamesBuider.setRFC822Names(email);

    X500Principal subject = subjectBuilder.buildPrincipal();
    GeneralNames altNames = altNamesBuider.buildAltNames();

    // use TreeSet because we want a deterministic certificate (ie. hash should not change)
    Set<KeyUsageType> keyUsage = new TreeSet<KeyUsageType>();

    keyUsage.add(KeyUsageType.DIGITALSIGNATURE);
    keyUsage.add(KeyUsageType.KEYENCIPHERMENT);
    keyUsage.add(KeyUsageType.NONREPUDIATION);

    Set<ExtendedKeyUsageType> extendedKeyUsage = new TreeSet<ExtendedKeyUsageType>();

    extendedKeyUsage.add(ExtendedKeyUsageType.CLIENTAUTH);
    extendedKeyUsage.add(ExtendedKeyUsageType.EMAILPROTECTION);

    BigInteger serialNumber = new BigInteger("115fcd741088707366e9727452c9770", 16);

    Date now = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.UK)
            .parse("21-Nov-2007 10:38:35");

    certificateBuilder.setSubject(subject);
    certificateBuilder.setAltNames(altNames, true);
    certificateBuilder.setKeyUsage(keyUsage, true);
    certificateBuilder.setExtendedKeyUsage(extendedKeyUsage, false);
    certificateBuilder.setNotBefore(DateUtils.addDays(now, -20));
    certificateBuilder.setNotAfter(DateUtils.addYears(now, 20));
    certificateBuilder.setPublicKey(publicKey);
    certificateBuilder.setSerialNumber(serialNumber);
    certificateBuilder.setSignatureAlgorithm("SHA1WithRSAEncryption");
    certificateBuilder.addSubjectKeyIdentifier(true);

    X509Certificate certificate = certificateBuilder.generateCertificate(caPrivateKey, caCertificate);

    assertNotNull(certificate);

    certificates.add(certificate);

    Certificate[] chain = new Certificate[] { certificate, caCertificate, rootCertificate };

    keyStore.setKeyEntry("ValidCertificate", privateKey, null, chain);
}

From source file:com.salesmanager.core.service.order.impl.dao.OrderDao.java

public SearchOrderResponse searchOrder(SearchOrdersCriteria searchCriteria) {

    Criteria criteria = super.getSession().createCriteria(Order.class)
            .add(Restrictions.eq("merchantId", searchCriteria.getMerchantId()))
            .add(Restrictions.eq("channel", OrderConstants.ONLINE_CHANNEL))
            .addOrder(org.hibernate.criterion.Order.desc("orderId"))
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    StringBuffer q = new StringBuffer();

    q.append(" select o from Order o where o.merchantId=:mId");
    q.append(" and channel=:channel");

    if (searchCriteria != null) {

        if (!StringUtils.isBlank(searchCriteria.getCustomerName())) {
            q.append(" and o.customerName like :cName");
        }/*www.j  av  a2 s . c om*/

        if (searchCriteria.getOrderId() != -1) {
            q.append(" and o.orderId= :oId");
        }

        if (searchCriteria.getEdate() != null || searchCriteria.getSdate() != null) {
            if (searchCriteria.getSdate() != null) {
                q.append(" and o.datePurchased > :sDate");
            } else {
                q.append(" and o.datePurchased > :sDate");
            }
            if (searchCriteria.getEdate() != null) {
                q.append(" and o.datePurchased < :eDate");
            } else {
                q.append(" and o.datePurchased < :eDate");
            }
        }
    }
    q.append(" order by o.orderId desc");

    Query c = super.getSession().createQuery(q.toString());
    c.setInteger("channel", OrderConstants.ONLINE_CHANNEL);
    c.setInteger("mId", searchCriteria.getMerchantId());

    if (searchCriteria != null) {

        if (!StringUtils.isBlank(searchCriteria.getCustomerName())) {
            criteria.add(Restrictions.like("customerName", "%" + searchCriteria.getCustomerName() + "%"));
            c.setString("cName", "%" + searchCriteria.getCustomerName() + "%");
        }

        if (searchCriteria.getOrderId() != -1) {
            criteria.add(Restrictions.eq("orderId", searchCriteria.getOrderId()));
            c.setLong("oId", searchCriteria.getOrderId());
        }

        if (searchCriteria.getEdate() != null || searchCriteria.getSdate() != null) {
            if (searchCriteria.getSdate() != null) {
                criteria.add(Restrictions.ge("datePurchased", searchCriteria.getSdate()));
                c.setDate("sDate", searchCriteria.getSdate());
            } else {
                criteria.add(Restrictions.ge("datePurchased", DateUtils.addDays(new Date(), -1)));
                c.setDate("sDate", DateUtils.addDays(new Date(), -1));
            }
            if (searchCriteria.getEdate() != null) {
                criteria.add(Restrictions.le("datePurchased", searchCriteria.getEdate()));
                c.setDate("eDate", searchCriteria.getEdate());
            } else {
                criteria.add(Restrictions.ge("datePurchased", DateUtils.addDays(new Date(), +1)));
                c.setDate("eDate", DateUtils.addDays(new Date(), +1));
            }
        }
    }

    criteria.setProjection(Projections.rowCount());
    Integer count = (Integer) criteria.uniqueResult();

    criteria.setProjection(null);

    int max = searchCriteria.getQuantity();

    List list = null;
    if (max != -1 && count > 0) {
        c.setMaxResults(searchCriteria.getUpperLimit(count));
        c.setFirstResult(searchCriteria.getLowerLimit());
        list = c.list();
    } else {
        list = c.list();
    }

    SearchOrderResponse response = new SearchOrderResponse();
    response.setCount(count);
    response.setOrders(list);

    return response;

}

From source file:mitm.common.security.ca.hibernate.CertificateRequestStoreImplTest.java

@Test
public void testSorting() throws Exception {
    AutoTransactDelegator delegator = AutoTransactDelegator.createProxy();

    Date now = new Date();

    Date old = DateUtils.addDays(now, -1);

    delegator.addRequest(now, null, "now@example.com", 365, null, null, "dummy", null, new Date(), null, null);

    delegator.addRequest(old, null, "old@example.com", 365, null, null, "dummy", null, new Date(), null, null);

    List<? extends CertificateRequest> found = delegator.getAllRequests(null, null);

    assertEquals(2, found.size());//from w w  w .j  a  va  2  s. co  m

    CertificateRequest request = found.get(0);
    assertEquals("old@example.com", request.getEmail());
    assertNull(request.getKeyPair(encryptor));

    request = found.get(1);
    assertEquals("now@example.com", request.getEmail());
}

From source file:cn.vlabs.umt.services.user.service.impl.UserServiceImpl.java

@Override
public void sendChangeMail(Locale locale, int uid, String loginName, String baseURL) throws UserNotFound {
    User user = getUserByUid(uid);//from ww  w . j  a  va2  s  .  c  o  m
    if (user == null) {
        throw new UserNotFound("loginName=" + loginName);
    }
    tokenService.removeTokensUnsed(user.getId(), Token.OPERATION_CHANGE_PASSWORD);
    Token token = tokenService.createToken(user.getId(), Token.OPERATION_CHANGE_PASSWORD);
    Properties params = new Properties();
    params.setProperty("UserName", user.getTrueName() == null ? user.getUmtId() : user.getTrueName());
    params.setProperty("ChangeURL",
            baseURL + "/changepass?tokenid=" + token.getId() + "&random=" + token.getRandom());
    params.setProperty("CancelURL",
            baseURL + "/changepass?act=cancel&tokenid=" + token.getId() + "&random=" + token.getRandom());
    Date now = new Date();
    params.setProperty("CurrentDate", DateFormatUtils.format(now, "yyyy-MM-dd"));
    Date threeDaysAfter = DateUtils.addDays(now, 1);
    params.setProperty("InvalidteTime", DateFormatUtils.format(threeDaysAfter, "yyyy-MM-dd"));

    try {
        email.send(locale, loginName, EmailTemplate.TARGET_PASSWORD, params);
    } catch (MailException e) {
        LOGGER.error(e.getMessage());
        LOGGER.debug("information:", e);
    }
}

From source file:ch.algotrader.service.CalendarServiceImpl.java

/**
 * Get all TimeIntervals for this date, the day before and the day after
 *///from  www . j a  v a 2s .  c  o m
private TimeIntervals getTimeIntervalsPlusMinusOneDay(final Exchange exchange, final Date date) {

    TimeIntervals timeIntervals = new TimeIntervals();
    timeIntervals.addAll(getTimeIntervals(exchange, DateUtils.addDays(date, -1)));
    timeIntervals.addAll(getTimeIntervals(exchange, date));
    timeIntervals.addAll(getTimeIntervals(exchange, DateUtils.addDays(date, +1)));
    return timeIntervals;
}

From source file:ch.algotrader.service.bb.BBHistoricalDataServiceImpl.java

private Date getStartDate(Date endDate, int timePeriodLength, TimePeriod timePeriod) {

    switch (timePeriod) {
    case DAY://from ww w.j a v a  2 s .  co  m
        return DateUtils.addDays(endDate, -timePeriodLength);
    case WEEK:
        return DateUtils.addWeeks(endDate, -timePeriodLength);
    case MONTH:
        return DateUtils.addMonths(endDate, -timePeriodLength);
    case YEAR:
        return DateUtils.addYears(endDate, -timePeriodLength);
    default:
        throw new IllegalArgumentException("timePeriod is not allowed " + timePeriod);
    }
}

From source file:com.finance.it.micro_lending.RestApplicationTests.java

@Test
public void testRequestLoanExtention() throws Exception {

    UserApplication userObj = new UserApplication("Test", "Test", "test_address", "email@cm.com", "Warsaw",
            "01-654", "Warsaw", "Poland", "4543fgyyyy");

    final ObjectMapper mapper = new ObjectMapper();

    this.mvc.perform(
            post("/user").contentType(MediaType.APPLICATION_JSON).content(mapper.writeValueAsString(userObj)))
            .andExpect(status().isCreated()).andDo(new ResultHandler() {

                @Override//from  ww  w.  j  a  v a2  s .  co m
                public void handle(MvcResult result) throws Exception {
                    String jsonOP = result.getResponse().getContentAsString();
                    log.info("Received Json str : " + jsonOP);

                    jsonOP = jsonOP.substring(0, jsonOP.indexOf(",\"links\":[")) + "}";
                    Message message = mapper.readValue(jsonOP, Message.class);

                    final LoanApplication loanObj = new LoanApplication(499, 7);

                    final String userId = message.getReferenceId();

                    mvc.perform(post("/user/" + message.getReferenceId() + "/loan")
                            .contentType(MediaType.APPLICATION_JSON)
                            .content(mapper.writeValueAsString(loanObj))).andExpect(status().isAccepted())
                            .andDo(new ResultHandler() {

                                @Override
                                public void handle(MvcResult result) throws Exception {
                                    String jsonOP = result.getResponse().getContentAsString();
                                    log.info("Received Json str : " + jsonOP);
                                    jsonOP = jsonOP.substring(0, jsonOP.indexOf(",\"links\":[")) + "}";
                                    Message message = mapper.readValue(jsonOP, Message.class);

                                    List<Loan> loan = loanRepository
                                            .getLoansByReferenceId(message.getReferenceId());

                                    final Date loanTermDate = loan.get(0).getTerm();

                                    LoanExtention loanExtention = new LoanExtention(5);

                                    final String loanRefId = message.getReferenceId();

                                    mvc.perform(put("/user/" + userId + "/loan/" + message.getReferenceId())
                                            .contentType(MediaType.APPLICATION_JSON)
                                            .content(mapper.writeValueAsString(loanExtention)))
                                            .andExpect(status().isAccepted()).andDo(new ResultHandler() {

                                                @Override
                                                public void handle(MvcResult result) throws Exception {
                                                    String jsonResult = result.getResponse()
                                                            .getContentAsString();
                                                    log.info("Received Json str : " + jsonResult);
                                                }
                                            });

                                    loan = loanRepository.getLoansByReferenceId(message.getReferenceId());

                                    assertEquals(loan.size(), 1);
                                    assertTrue(loan.get(0).isExtended());
                                    assertEquals(loan.get(0).getCreatedBy(),
                                            userRepository.findOne(Long.parseLong(userId)));
                                    assertEquals(DateUtils.addDays(loan.get(0).getTerm(), 0),
                                            DateUtils.addDays(loanTermDate, loanExtention.getTerm()));

                                    mvc.perform(post("/user/" + userId + "/loan")
                                            .contentType(MediaType.APPLICATION_JSON)
                                            .content(mapper.writeValueAsString(loanObj)))
                                            .andExpect(status().isAccepted()).andDo(new ResultHandler() {

                                                @Override
                                                public void handle(MvcResult result) throws Exception {

                                                    User user = userRepository.findOne(Long.parseLong(userId));

                                                    assertEquals(2, user.getLoans().size());

                                                    String jsonOP = result.getResponse().getContentAsString();
                                                    log.info("Received Json str : " + jsonOP);
                                                    jsonOP = jsonOP.substring(0, jsonOP.indexOf(",\"links\":["))
                                                            + "}";
                                                    Message message = mapper.readValue(jsonOP, Message.class);
                                                    assertTrue(user.getLoans().containsKey(loanRefId));
                                                    assertTrue(user.getLoans()
                                                            .containsKey(message.getReferenceId()));

                                                }
                                            });

                                }
                            });

                }
            });

}

From source file:mitm.common.security.certificate.GenerateTestCA.java

private void generateIntermediate() throws Exception {
    assertNotNull(rootCertificate);/*from w  ww.ja  v  a  2s .c om*/
    assertNotNull(rootPrivateKey);

    X509CertificateBuilder certificateBuilder = securityFactory.createX509CertificateBuilder();

    String encodedPrivateKey = "30820275020100300d06092a864886f70d01010105000482025f3082025b"
            + "02010002818100885ea4a4890e6ceee8cca888bf9a95954217bf5f13a0c2"
            + "07f15d1e1e23eb72742c0c5fa1e9b5c68d91d2c8ad85a194f9396c751ead"
            + "6d4d015568260eb03a1e4ceae77ea7995f2e301443a5ccb1d37c09715dd7"
            + "f43445728583cc8eb3331c021ed11afd60a5286ca0bb33fb236ee61ac291"
            + "d5c3e5bb8fdf95dc4bc3b4a7391d070203010001028180380f18059f65f3"
            + "b7feb16b32d3f93b36a175dbb0bd03dfdf9e0416867363ada83e175414de"
            + "5b606500263362c9c553d5641ac6c6b6aa70f674629d0a7abd5988d16f2f"
            + "4f3abaf16c1a95bee5a7f95b3349185f0d43e60bce272fb8575540469306"
            + "072d1aad5efd286322763f9c4129adc9e1fe1a32cb3405fcd55c21007ee3"
            + "31024100c14b80e4f08ca60070eff8d0e2e15ee08c8eeb0c6d73b845b522"
            + "8a014d2f519ab70da6d2a26958f361b95e6905a9f2a2d025cbe18c85bf4c"
            + "f272642956b0444f024100b49bb08a8c5efbb45637b24f8160f996346e4e"
            + "2055a0235c775487f7ca813af38eb0b57e39155a2bb52607727bda1f6934"
            + "20001c45dea066db3da907f7f715c90240710564e8787ec4d19d37b394f0"
            + "143715b51a1bf5b849e18560d4413d61943972ed75de056b518de14152d2"
            + "11366e98a0fa741f3252a821a32c601690d54f5ba102407afa7c468af86e"
            + "29c87f5a521ac5be8d519c3e6474097baa8db2a876c894206111ab2f9a08"
            + "228ae8b20b780cb35abe02b3b48a7eb5f0b685f309545c91b2d44902403d"
            + "cca6f96e93dfd0db083ad41eb22ea8a34a7ecd617357ceb02b653f76f39b"
            + "32b0ea3d7596760f00bb45969d3ccd131c63bb9d1b803c73839ee37e52e1" + "b27e1d";

    String encodedPublicKey = "30819f300d06092a864886f70d010101050003818d003081890281810088"
            + "5ea4a4890e6ceee8cca888bf9a95954217bf5f13a0c207f15d1e1e23eb72"
            + "742c0c5fa1e9b5c68d91d2c8ad85a194f9396c751ead6d4d015568260eb0"
            + "3a1e4ceae77ea7995f2e301443a5ccb1d37c09715dd7f43445728583cc8e"
            + "b3331c021ed11afd60a5286ca0bb33fb236ee61ac291d5c3e5bb8fdf95dc" + "4bc3b4a7391d070203010001";

    PrivateKey privateKey = decodePrivateKey(encodedPrivateKey);
    PublicKey publicKey = decodePublicKey(encodedPublicKey);

    X500PrincipalBuilder subjectBuilder = new X500PrincipalBuilder();

    String email = "ca@example.com";

    subjectBuilder.setCommonName("MITM Test CA");
    subjectBuilder.setCountryCode("NL");
    subjectBuilder.setEmail(email);
    subjectBuilder.setLocality("Amsterdam");
    subjectBuilder.setState("NH");

    AltNamesBuilder altNamesBuider = new AltNamesBuilder();

    altNamesBuider.setRFC822Names(email);

    X500Principal subject = subjectBuilder.buildPrincipal();
    GeneralNames altNames = altNamesBuider.buildAltNames();

    Set<KeyUsageType> keyUsage = new TreeSet<KeyUsageType>();

    keyUsage.add(KeyUsageType.KEYCERTSIGN);
    keyUsage.add(KeyUsageType.CRLSIGN);

    Set<ExtendedKeyUsageType> extendedKeyUsage = new TreeSet<ExtendedKeyUsageType>();

    extendedKeyUsage.add(ExtendedKeyUsageType.EMAILPROTECTION);
    extendedKeyUsage.add(ExtendedKeyUsageType.OCSPSIGNING);

    BigInteger serialNumber = new BigInteger("115fcad6b536fd8d49e72922cd1f0da", 16);

    Date now = TestUtils.parseDate("21-Nov-2007 07:38:35 GMT");

    X500Principal issuer = rootCertificate.getSubjectX500Principal();

    certificateBuilder.setSubject(subject);
    certificateBuilder.setIssuer(issuer);
    certificateBuilder.setAltNames(altNames, true);
    certificateBuilder.setKeyUsage(keyUsage, true);
    certificateBuilder.setExtendedKeyUsage(extendedKeyUsage, false);
    certificateBuilder.setNotBefore(DateUtils.addDays(now, -20));
    certificateBuilder.setNotAfter(DateUtils.addYears(now, 20));
    certificateBuilder.setPublicKey(publicKey);
    certificateBuilder.setSerialNumber(serialNumber);
    certificateBuilder.setSignatureAlgorithm("SHA1WithRSAEncryption");
    certificateBuilder.setIsCA(true, true);
    certificateBuilder.addSubjectKeyIdentifier(true);

    // generate certificate signed by root
    intermediateCertificate = certificateBuilder.generateCertificate(rootPrivateKey, rootCertificate);

    assertNotNull(intermediateCertificate);

    Certificate[] chain = new Certificate[] { intermediateCertificate, rootCertificate };

    keyStore.setKeyEntry("ca", privateKey, null, chain);
}

From source file:ch.algotrader.service.CalendarServiceImpl.java

/**
 * Get the TimeInterval for the specified week, tradingHours and weekday
 * Taking into consideration potential lateOpens and earlyCloses
 * return null if this day is a full holiday
 *///from   w w  w . j  ava2  s .c  o m
private TimeInterval getTimeInterval(final Date date, final TradingHours tradingHours) {

    TimeZone timeZone = tradingHours.getExchange().getTZ();
    boolean inverse = tradingHours.getOpen().compareTo(tradingHours.getClose()) > 0;

    Date open = getDateTime(timeZone, date, tradingHours.getOpen());
    Date close = getDateTime(timeZone, date, tradingHours.getClose());

    if (!tradingHours.isEnabled(getWeekDay(open, timeZone))) {
        return null;
    }

    Holiday holiday = getHoliday(tradingHours.getExchange(), date);
    if (holiday != null) {
        if (holiday.getLateOpen() != null) {
            open = getDateTime(timeZone, date, holiday.getLateOpen());
        } else if (holiday.getEarlyClose() != null) {
            close = getDateTime(timeZone, date, holiday.getEarlyClose());
        } else {
            return null;
        }
    }

    if (inverse) {
        open = DateUtils.addDays(open, -1);
    }

    return new TimeInterval(open, close);
}