Here you can find the source of parseDate(String str)
Parameter | Description |
---|---|
ParseException | If the given string is not a valid ISO-8601 date. |
public static Date parseDate(String str) throws ParseException
//package com.java2s; /*//w ww.ja v a 2 s . com * Copyright (C) 2012-2015 DataStax Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class Main { /** * Valid ISO-8601 patterns for CQL timestamp literals. */ private static final String[] iso8601Patterns = new String[] { "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mmZ", "yyyy-MM-dd HH:mm:ssZ", "yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm", "yyyy-MM-dd'T'HH:mmZ", "yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ssZ", "yyyy-MM-dd'T'HH:mm:ss.SSS", "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd", "yyyy-MM-ddZ" }; /** * Parse the given string as a date, using one of the accepted ISO-8601 date patterns. * <p/> * This method is adapted from Apache Commons {@code DateUtils.parseStrictly()} method (that is used Cassandra side * to parse date strings).. * * @throws ParseException If the given string is not a valid ISO-8601 date. * @see <a href="https://cassandra.apache.org/doc/cql3/CQL-2.2.html#usingtimestamps">'Working with timestamps' section of CQL specification</a> */ public static Date parseDate(String str) throws ParseException { SimpleDateFormat parser = new SimpleDateFormat(); parser.setLenient(false); // set a default timezone for patterns that do not provide one parser.setTimeZone(TimeZone.getTimeZone("UTC")); // Java 6 has very limited support for ISO-8601 time zone formats, // so we need to transform the string first // so that accepted patterns are correctly handled, // such as Z for UTC, or "+00:00" instead of "+0000". // Note: we cannot use the X letter in the pattern // because it has been introduced in Java 7. str = str.replaceAll("(\\+|\\-)(\\d\\d):(\\d\\d)$", "$1$2$3"); str = str.replaceAll("Z$", "+0000"); ParsePosition pos = new ParsePosition(0); for (String parsePattern : iso8601Patterns) { parser.applyPattern(parsePattern); pos.setIndex(0); Date date = parser.parse(str, pos); if (date != null && pos.getIndex() == str.length()) { return date; } } throw new ParseException("Unable to parse the date: " + str, -1); } /** * Parse the given string as a date, using the supplied date pattern. * <p/> * This method is adapted from Apache Commons {@code DateUtils.parseStrictly()} method (that is used Cassandra side * to parse date strings).. * * @throws ParseException If the given string cannot be parsed with the given pattern. * @see <a href="https://cassandra.apache.org/doc/cql3/CQL-2.2.html#usingtimestamps">'Working with timestamps' section of CQL specification</a> */ public static Date parseDate(String str, String pattern) throws ParseException { SimpleDateFormat parser = new SimpleDateFormat(); parser.setLenient(false); // set a default timezone for patterns that do not provide one parser.setTimeZone(TimeZone.getTimeZone("UTC")); // Java 6 has very limited support for ISO-8601 time zone formats, // so we need to transform the string first // so that accepted patterns are correctly handled, // such as Z for UTC, or "+00:00" instead of "+0000". // Note: we cannot use the X letter in the pattern // because it has been introduced in Java 7. str = str.replaceAll("(\\+|\\-)(\\d\\d):(\\d\\d)$", "$1$2$3"); str = str.replaceAll("Z$", "+0000"); ParsePosition pos = new ParsePosition(0); parser.applyPattern(pattern); pos.setIndex(0); Date date = parser.parse(str, pos); if (date != null && pos.getIndex() == str.length()) { return date; } throw new ParseException("Unable to parse the date: " + str, -1); } }