Java Форматировать отметку времени - PullRequest
0 голосов
/ 27 мая 2020

У меня ниже Java код для преобразования строкового формата в объект Timestamp

public class TestUtil{
  Object result;

 Public Object convertFormat(String format, String value, String type){

 String format = "yyyyMMddHHmmss";
 String value = "20050225144824";
 SimpleDateFormat dformat = new SimpleDateFormat(format);
 java.util.Date date = dformat.parse(value);
 result = new Timestamp(date.getTime);
 System.out.println("Result::"+  result);
 }
}

Ожидаемый результат: Я ожидал, что результат должен быть таким, как показано ниже

 20050225144824

Фактический результат:

  2005-02-25 14:48:24.0

Может ли кто-нибудь сказать мне, что мне здесь не хватает? Чтобы получить «20050225144824» этот результат

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Приведенный ниже код подходит мне.

Добавление нескольких операторов печати для объяснения различного поведения.

import java.util.Date;
import java.text.SimpleDateFormat;  
import java.sql.Timestamp;

public class Main
{
    public static void main(String[] args) {
        String myFormat = "yyyyMMddHHmmss";
        String value = "20050225144824";

        try {
        SimpleDateFormat dformat = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = dformat.parse(value);
        Timestamp ts = new Timestamp(date.getTime());
        Object result = new Timestamp(date.getTime());

        System.out.println("Timestamp Format with yyyyMMddHHmmss : " +dformat.format(ts));
        System.out.println("Object Format with yyyyMMddHHmmss    : " +result);
        System.out.println("Object Format with yyyyMMddHHmmss    : " +dformat.format(result));

        } catch(Exception e) { 
            e.printStackTrace();
        }
    }
}

Вот результат различных вариантов поведения:

   Timestamp Format with yyyyMMddHHmmss : 20050225144824                                                                                               
   Object Format with yyyyMMddHHmmss    : 2005-02-25 14:48:24.0                                                                                        
   Object Format with yyyyMMddHHmmss    : 20050225144824 
0 голосов
/ 27 мая 2020
• 1000 Я изменил изменения в соответствии с вашими требованиями.
public class CustomTimestamp extends Timestamp {

    private int nanos;

    public CustomTimestamp(long time) {
        super(time);
    }

    @Override
    public String toString () {

        int year = super.getYear() + 1900;
        int month = super.getMonth() + 1;
        int day = super.getDate();
        int hour = super.getHours();
        int minute = super.getMinutes();
        int second = super.getSeconds();
        String yearString;
        String monthString;
        String dayString;
        String hourString;
        String minuteString;
        String secondString;
        String nanosString;
        String zeros = "000000000";
        String yearZeros = "0000";
        StringBuffer timestampBuf;

        if (year < 1000) {
            // Add leading zeros
            yearString = "" + year;
            yearString = yearZeros.substring(0, (4-yearString.length())) +
                yearString;
        } else {
            yearString = "" + year;
        }
        if (month < 10) {
            monthString = "0" + month;
        } else {
            monthString = Integer.toString(month);
        }
        if (day < 10) {
            dayString = "0" + day;
        } else {
            dayString = Integer.toString(day);
        }
        if (hour < 10) {
            hourString = "0" + hour;
        } else {
            hourString = Integer.toString(hour);
        }
        if (minute < 10) {
            minuteString = "0" + minute;
        } else {
            minuteString = Integer.toString(minute);
        }
        if (second < 10) {
            secondString = "0" + second;
        } else {
            secondString = Integer.toString(second);
        }
        if (nanos == 0) {
            nanosString = "";
        } else {
            nanosString = Integer.toString(nanos);

            // Add leading zeros
            nanosString = zeros.substring(0, (9-nanosString.length())) +
                nanosString;

            // Truncate trailing zeros
            char[] nanosChar = new char[nanosString.length()];
            nanosString.getChars(0, nanosString.length(), nanosChar, 0);
            int truncIndex = 8;
            while (nanosChar[truncIndex] == '0') {
                truncIndex--;
            }

            nanosString = new String(nanosChar, 0, truncIndex + 1);

        }

        // do a string buffer here instead.
        timestampBuf = new StringBuffer(20+nanosString.length());
        timestampBuf.append(yearString);
        timestampBuf.append(monthString);
        timestampBuf.append(dayString);
        timestampBuf.append(hourString);
        timestampBuf.append(minuteString);
        timestampBuf.append(secondString);
        timestampBuf.append(nanosString);

        return (timestampBuf.toString());
    }
}

Ваш основной класс должен использовать CustomTimestamp для получения вывода

try {
    String format = "yyyyMMddHHmmss";
    String value = "20050225144824";
    SimpleDateFormat dformat = new SimpleDateFormat(format);
    java.util.Date date;
    date = dformat.parse(value);
    Timestamp result = new CustomTimestamp(date.getTime());
    System.out.println("Result::" + result);
} catch (ParseException e) {
    e.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...