У меня есть переменная времени аварии в моей базе данных, которая ошибочна, например, время может отображаться как 55, что означает 00:55 или 0, что означает 00:00. Другой может быть 200, что означает 02:00. Он имеет хорошие значения, как и 9:15, которые мне нужно сделать 09:15. Это круглосуточная система часов. Теперь я пишу небольшой частный метод, где мне нужно сравнить время (которое является строкой) и изменить его на правильное. Я использовал .equals, чтобы проверить, равна ли строка 0 и назначил ей 00:00. Мне нужна помощь, чтобы проверить, больше или меньше, чем для строк в Java (пример, если время меньше, чем 10 патч с 0 в передней части), а также как мне изменить с 200 на 02:00. Любая помощь оценивается.сравнение строк в Java
ответ
Я не фиксировал бы на equals
метод. Вместо этого я бы использовал метод Integer.parseInt
, чтобы проверить, является ли значение DB в ошибочном (целочисленном) формате, а затем преобразует это значение в новое «каноническое» представление.
Вот что я имею в виду:
String fixupDbValue(final String dbVal)
{
final int intVal;
try
{
intVal = Integer.parseInt(dbVal);
}
catch (NumberFormatException ex)
{
// Not an int string, canonicalize string value
// Check that it's in dd:dd format
return fixupStringValue(dbVal);
}
return fixupIntValue(intVal);
}
Я бы преобразовать время к военному времени, используя следующий код. Для аргумента прохождения шаблона «yyyy-MM-dd HH: mm: ss».
общественности статической Дата FormatDate (дата String, String dateFormatPattern) бросает ParseException {
if(date!=null && dateFormatPattern!=null && dateFormatPattern.trim().length()>0){ SimpleDateFormat df = new SimpleDateFormat(dateFormatPattern); return df.parse(df.format(date)); } return null; }
Затем используйте Date.compareTo() для сравнения дат возвращаемые с помощью форматера.
Прежде всего, я настоятельно рекомендую, чтобы изменить столбец БД использовать TIME
вместо VARCHAR
и написать SQL скрипт для фиксации значений соответственно. Таким образом, вам больше не нужно возиться с ним на стороне Java. Это просто уродливо. Использование правильного типа данных в течение времени предлагает множество преимуществ, вы могли бы легко выбирать/вычислять/манипулировать им с помощью обычных операторов/функций на основе целочисленных чисел в SQL.
Вы можете использовать java.sql.Time
(или java.util.Date
) объекта для хранения информации о время (PreparedStatement
и ResultSet
предлагают методы, чтобы установить и получить его в/из БД) и, наконец, просто использовать java.text.SimpleDateFormat
для преобразования между читаемой строкой времени человека и объект времени/даты.
Что касается вашего фактический вопрос, что-то, как это должно помочь:
String time = getItSomehow();
String paddedTime = String.format("%04d", Integer.valueOf(time)); // Pad with zeros to length of 4.
String formattedTime = String.format("%s:%s", paddedTime.substring(0, 2), paddedTime.substring(2, 4)); // Format in desired format.
Я не уверен, что вы имели в виду под «написанием SQL-скрипта для исправления значений соответственно». Я пытался изменить свое время от STRING до TIME, но его не удалось ... Не могли бы вы предложить что-нибудь? – mona
Но в первую очередь, вам необходимо преобразовать String
в Date
. java.text.SimpleDateFormat
может помочь.
Анализируя свой алгоритм, я вижу: - если строка состоит из 2-х цифр, вам нужно добавить «00:» в начале - если строка состоит из 3-х цифр, вам нужно добавить «0» в начале и разделить добавить ":" после второй цифры; - если строка содержит ":", мы ничего не делаем.
я вижу что-то вроде этого:
public class Main {
public static void main(String[] args) throws ParseException {
System.out.println(getTime("02"));
System.out.println(getTime("200"));
System.out.println(getTime("9:15"));
System.out.println(getTime("9:"));
System.out.println(getTime("55"));
}
public static Date getTime(String stringTime) throws ParseException {
String correctTimeString;
SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm");
//first of all, converting string to
int len = stringTime.length();
if (stringTime.contains(":")) {
int index = stringTime.indexOf(":");
if (index == stringTime.length() - 1) {
correctTimeString = stringTime + "0";
} else {
correctTimeString = stringTime;
}
} else if (len == 1) {
correctTimeString = "00:0" + stringTime;
} else if (len == 2) {
correctTimeString = "00:" + stringTime;
} else if (len == 3) {
correctTimeString = "0" + stringTime.charAt(0) + ":" + stringTime.substring(1, stringTime.length());
} else {
throw new RuntimeException("Unsupported date format");
}
//after convertation, parsing date
return dateFormat.parse(correctTimeString);
}
}
Вы можете изменить время форматирования или оптимизации строки здание, используя StringBuffer
или StringBuilder
или вы можете использовать Regex для разбора даты. Думаю, у тебя есть идея. Вы можете исправить код, если я пропустил что-то в алгоритме.
Для сравнения дат используйте java.util.Date.compareTo(Date anotherDate)
Возвраты: значение 0, если аргумент Дата равно этой даты; значение меньше 0, если эта дата предшествует аргументу Date; и значение больше 0, если эта дата после аргумента Date.
Это BalusCs код в действии
import java.util.Arrays;
import java.util.List;
public class DBTime {
final private static List<String> timeStrings = Arrays.asList(
"55",
"0",
"200",
"915",
"00:55",
"00:00",
"02:00",
"09:15");
public static void main(String[] args) {
for (String timeString : timeStrings) {
System.out.println(convertDbString(timeString));
}
}
private static String convertDbString(final String dbString) {
if (dbString.contains(":")) { //Check if value is corrupted
return dbString;
} else {
String paddedTime = String.format("%04d", Integer.valueOf(dbString));
return String.format("%s:%s", paddedTime.substring(0, 2), paddedTime.substring(2, 4));
}
}
}
и это выход из этого кода
run:
00:55
00:00
02:00
09:15
00:55
00:00
02:00
09:15
BUILD SUCCESSFUL (total time: 1 second)
Зачем нужен доступ на уровне пакета 'TimeStrings' (вместо частного)? –
Это личное. Я не вижу причины сделать его закрытым (по умолчанию). Раньше это был пакет? –
- 1. Сравнение строк Сравнение в java
- 2. Сравнение строк в java
- 3. Сравнение строк в Java
- 4. Сравнение строк в Java
- 5. Сравнение строк в Java
- 6. Сравнение строк в Java?
- 7. Сравнение строк в Java
- 8. Сравнение строк Java
- 9. сравнение строк - JAVA
- 10. Java - Сравнение строк
- 11. Необычное сравнение строк Java
- 12. Сравнение строк строки Java
- 13. Сравнение строк Java
- 14. Java сравнение строк
- 15. Сравнение строк Java
- 16. JAVA, сравнение двух строк
- 17. Сравнение строк Java
- 18. Сравнение строк даты в Java
- 19. java Сравнение строк в concat
- 20. Сравнение n строк в java
- 21. Сравнение строк в андроидах java
- 22. Сравнение двух строк в Java
- 23. Сравнение производительности строк в java
- 24. Сравнение/сопоставление строк в java
- 25. Сравнение строк в Java Weird
- 26. Сравнение строк и преобразование строк в Java
- 27. Демонстрируя сравнение строк с Java
- 28. Java for Selenium - Сравнение строк
- 29. JAVA: Лексикографическое сравнение двух строк
- 30. Сравнение Java-строк не работает
Если вы еще не планировали этого вы должны сделать один раз фиксируем нормализовать все ваши времена, а затем добавьте проверку, чтобы предотвратить то, что не время от попадания в базу данных. Подход, который большинство людей использует, - фактически использовать поле DateTime в БД вместо строки. – Justin