我的数据库中有一个事故时间变量是错误的,例如时间可能显示为55,表示00:55或0表示00:00。另一个可能是200,这意味着02:00。它有很好的价值,如9:15,我需要09:15。这是一个24小时制的系统。现在我正在编写一个小的私有方法,我需要比较时间(这是一个字符串)并将其更改为正确的方法。我使用.equals检查并查看字符串是否等于0并将其分配给00:00。我需要帮助来检查Java中的字符串是否大于或小于(例如,如果时间小于10,则在前面修补0),以及如何将200更改为02:00。任何帮助赞赏。
答案 0 :(得分:3)
首先,我强烈建议您更改数据库列以使用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.
答案 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)
我会使用以下代码将时间转换为军事时间。对于模式传递参数“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;
}
然后使用Date.compareTo()比较使用格式化程序返回的日期。
答案 3 :(得分:0)
但首先,您需要将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)
返回: 如果参数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)