首页 > String 转 timeStamp

String 转 timeStamp

String “2014-11-11” 转换成 timestamp ”2014-11-11“

```public static Timestamp getTimestamp(String time){

    Timestamp ts = new Timestamp(System.currentTimeMillis());     
    try {   
        ts = Timestamp.valueOf(time);   
        System.out.println(ts);   
    } catch (Exception e) {   
        e.printStackTrace(); 
        logger.error("String转timeStamp出错");
    }
    return ts;
}

``
这样转换报错 说timeStamp的格式必须是2013-11-11 00:00:00这种的


如果你很确定要把string转成Timestamp 的话,可以用SimpleDateFormat先转换一下加上时间,或直接在string中加上默认的时间string + " 00:00:00"

如果你也不是很必须的用Timestamp做转换的话,请用Date,SimpleDateFormat即可。

Timestamp是UTC格式的日期,啥叫UTC?请搜索一下看看。如果没有时间,怎么体现出UTC?


先把String转成Date再转Timestamp,使用joda可以让转换更简单。

import org.joda.time.DateTime;
import java.sql.Timestamp;

public class Q1010000002719435 {

    public static void main(String[] args) {
        String timeStampString = "2014-11-11";
        DateTime dateTime = DateTime.parse(timeStampString);
        Timestamp timestamp = new Timestamp(dateTime.getMillis());
        System.out.println(timestamp);
    }
}

    public static Timestamp valueOf(String s) {
    final int YEAR_LENGTH = 4;
    final int MONTH_LENGTH = 2;
    final int DAY_LENGTH = 2;
    final int MAX_MONTH = 12;
    final int MAX_DAY = 31;
    String date_s;
    String time_s;
    String nanos_s;
    int year = 0;
    int month = 0;
    int day = 0;
    int hour;
    int minute;
    int second;
    int a_nanos = 0;
    int firstDash;
    int secondDash;
    int dividingSpace;
    int firstColon = 0;
    int secondColon = 0;
    int period = 0;
    String formatError = "Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]";
    String zeros = "000000000";
    String delimiterDate = "-";
    String delimiterTime = ":";

    if (s == null) throw new java.lang.IllegalArgumentException("null string");

    // Split the string into date and time components
    s = s.trim();
    dividingSpace = s.indexOf(' ');
    if (dividingSpace > 0) {
        date_s = s.substring(0,dividingSpace);
        time_s = s.substring(dividingSpace+1);
    } else {
        throw new java.lang.IllegalArgumentException(formatError);
    }

    // Parse the date
    firstDash = date_s.indexOf('-');
    secondDash = date_s.indexOf('-', firstDash+1);

    // Parse the time
    if (time_s == null)
        throw new java.lang.IllegalArgumentException(formatError);
    firstColon = time_s.indexOf(':');
    secondColon = time_s.indexOf(':', firstColon+1);
    period = time_s.indexOf('.', secondColon+1);

    // Convert the date
    boolean parsedDate = false;
    if ((firstDash > 0) && (secondDash > 0) && (secondDash < date_s.length() - 1)) {
        String yyyy = date_s.substring(0, firstDash);
        String mm = date_s.substring(firstDash + 1, secondDash);
        String dd = date_s.substring(secondDash + 1);
        if (yyyy.length() == YEAR_LENGTH &&
                (mm.length() >= 1 && mm.length() <= MONTH_LENGTH) &&
                (dd.length() >= 1 && dd.length() <= DAY_LENGTH)) {
             year = Integer.parseInt(yyyy);
             month = Integer.parseInt(mm);
             day = Integer.parseInt(dd);

            if ((month >= 1 && month <= MAX_MONTH) && (day >= 1 && day <= MAX_DAY)) {
                parsedDate = true;
            }
        }
    }
    if (! parsedDate) {
        throw new java.lang.IllegalArgumentException(formatError);
    }

    // Convert the time; default missing nanos
    if ((firstColon > 0) & (secondColon > 0) &
        (secondColon < time_s.length()-1)) {
        hour = Integer.parseInt(time_s.substring(0, firstColon));
        minute =
            Integer.parseInt(time_s.substring(firstColon+1, secondColon));
        if ((period > 0) & (period < time_s.length()-1)) {
            second =
                Integer.parseInt(time_s.substring(secondColon+1, period));
            nanos_s = time_s.substring(period+1);
            if (nanos_s.length() > 9)
                throw new java.lang.IllegalArgumentException(formatError);
            if (!Character.isDigit(nanos_s.charAt(0)))
                throw new java.lang.IllegalArgumentException(formatError);
            nanos_s = nanos_s + zeros.substring(0,9-nanos_s.length());
            a_nanos = Integer.parseInt(nanos_s);
        } else if (period > 0) {
            throw new java.lang.IllegalArgumentException(formatError);
        } else {
            second = Integer.parseInt(time_s.substring(secondColon+1));
        }
    } else {
        throw new java.lang.IllegalArgumentException(formatError);
    }

    return new Timestamp(year - 1900, month - 1, day, hour, minute, second, a_nanos);
}

源码解析的时候,代码是按照yyyy-mm-dd hh:mm:ss[.fffffffff]这种格式去解析的。可以从几个indexOf的调用可以看出来


试试用SimpleDateFormat 的parse方法,先将string转为Date,然后再从Date转为Timestamp就方便了。
还有希望后的HH:mm:ss全部为0,最好补全,不然系统会默认用当前的hh mm ss哦。
当然如果补全了,是否可以直接用你说的Timestamp.valueOf,呵呵!

【热门文章】
【热门文章】