Java中字符串的比较

时间:2010-08-30 19:39:07

标签: java

我的数据库中有一个事故时间变量是错误的,例如时间可能显示为55,表示00:55或0表示00:00。另一个可能是200,这意味着02:00。它有很好的价值,如9:15,我需要09:15。这是一个24小时制的系统。现在我正在编写一个小的私有方法,我需要比较时间(这是一个字符串)并将其更改为正确的方法。我使用.equals检查并查看字符串是否等于0并将其分配给00:00。我需要帮助来检查Java中的字符串是否大于或小于(例如,如果时间小于10,则在前面修补0),以及如何将200更改为02:00。任何帮助赞赏。

5 个答案:

答案 0 :(得分:3)

首先,我强烈建议您更改数据库列以使用TIME而不是VARCHAR并编写SQL脚本来相应地修复值。这样你就不再需要在Java方面进行操作了。这很难看。使用正确的数据类型提供了很多优势,您可以使用SQL中常用的基于整数的运算符/函数来更轻松地选择/计算/操作它。

您可以使用java.sql.Time(或java.util.Date)对象来保存时间信息(PreparedStatementResultSet提供方法来设置数据并从数据库中获取)最后只需使用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.

答案 1 :(得分:2)

我不会注意equals方法。相反,我会使用Integer.parseInt方法检查DB值是否为错误(整数)格式,然后将该int值转换为新的“规范”表示。

这就是我的意思:

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 );
}

答案 2 :(得分:0)

  1. 我会使用以下代码将时间转换为军事时间。对于模式传递参数“yyyy-MM-dd HH:mm:ss”。

    public static Date formatDate(String date,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;    
      }  
    
  2. 然后使用Date.compareTo()比较使用格式化程序返回的日期。

答案 3 :(得分:0)

但首先,您需要将String转换为Datejava.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);
}

}

您可以使用StringBufferStringBuilder更改时间格式或优化字符串构建,也可以使用Regex解析日期。我想你明白了。如果我错过算法中的某些内容,您可以更正代码。

比较日期使用java.util.Date.compareTo(Date anotherDate)

  

返回:   如果参数Date等于此Date,则值为0;如果此Date在Date参数之前,则小于0的值;如果此Date在Date参数之后,则值大于0.

答案 4 :(得分:0)

这是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)