当前位置:编程学习 > JAVA >>

mysql的datetime问题求解,高手请入

碰到一个很无解的问题,有一款软件,用的mysql数据库,里面有一个字段是datetime类型,非空,默认值为0000-00-00 00:00:00,映射到java的bean上是Date类型,问题在于,我现在如何从前台写入默认值的数据?如果这个字段不赋值吧,插入的时候会报错,因为no-null,如果赋值吧,java中的Date内容根本就无法定义0000-00-00 00:00:00这样的日期,最最早的日期也是02-01-01 00:00:00,怎么办?请高手指点~ mysql java --------------------编程问答-------------------- 补充:
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  Date begin = sdf.parse("0000-00-00 00:00:00");
  System.out.println(begin.toString());
控制台输出的是:Sun Nov 30 00:00:00 CST 2
很显然也不是0000-00-00 00:00:00 --------------------编程问答-------------------- 易做图dateformat转一下 --------------------编程问答--------------------
引用 2 楼 fudongrifdr 的回复:
易做图dateformat转一下

如何使用易做图dateformat转换成0000-00-00 00:00:00? --------------------编程问答-------------------- System.out.println(sdf.format(begin)); --------------------编程问答-------------------- mysql有个str_to_date函数吧 --------------------编程问答-------------------- 能不能改数据库,改成timestamp? --------------------编程问答--------------------
引用 4 楼 fudongrifdr 的回复:
System.out.println(sdf.format(begin));

输出为:0002-11-30 00:00:00 --------------------编程问答--------------------
引用 5 楼 fudongrifdr 的回复:
mysql有个str_to_date函数吧
我现在是从前台用java代码插入数据,没法用mysql函数~ --------------------编程问答--------------------
引用 6 楼 u010786672 的回复:
能不能改数据库,改成timestamp?
这个不能改,买的别人的软件,不能改数据库。 --------------------编程问答--------------------
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
调用 sdf.format()方法,不是parse() --------------------编程问答-------------------- 另外,你插入时,日期不要用DATE获得,用calendar看看. --------------------编程问答--------------------
转自:http://mxm910821.iteye.com/blog/1171571 --------------------编程问答-------------------- 你们都理解错我的意思了,我不是想把日期的格式调整为“0000-00-00 00:00:00”,而是就是想设置一个Date类型的变量,变量的初始值为0000-00-00 00:00:00 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 你这个问题是无解的,主要是你这个默认值本来就不合法。因为最后你要通过date存进去,而date中,0月其实是上一年的12月,而0日却是上一月的最后一天。
所以00-00最后肯定变成11-30了,要么你调整数据库的类型,要么调整默认值吧 --------------------编程问答-------------------- package com.hetaimall.core.util;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * 对日期做处理的工具类.
 * 
 * @author robin
 * @version 1.0
 */
public final class DateTime {

static final int[] DAY_OF_YEAR = { 31, 59, 90, 120, 151, 181, 212, 243,
273, 304, 334, 365 };

/** Note: all day ranged from 1-31 all month ranged from 1-12 */

// minimum number of days in a month
static final int[] DAYS_IN_MONTH = { 31, 28, 31, 30, 31, 30, 31, 31, 30,
31, 30, 31 };

static final SimpleDateFormat SDF_DATE = new SimpleDateFormat("yyyy-MM-dd");

static final SimpleDateFormat SDF_DATENO = new SimpleDateFormat("yyyyMMdd");

static final SimpleDateFormat SDF_DATETIME = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
static final SimpleDateFormat SDF_DATE_TIME = new SimpleDateFormat(
"yyyyMMddHHmmss");
static final SimpleDateFormat SDF_LONGSTRING = new SimpleDateFormat(
"yyMMddHHmmssSSS");

static final SimpleDateFormat SDF_LONGDATETIME = new SimpleDateFormat(
"MMMM dd, yyyy, EEE. hh:mm a", Locale.US);

static final SimpleDateFormat SDF_SHORTDATETIME = new SimpleDateFormat(
"yyyy-MM-dd HH:mm");

static final SimpleDateFormat SDF_TIME = new SimpleDateFormat("HH:mm:ss");

/**
 * Return an adjusted java.util.Date
 * 
 * @param d
 *            A java.util.Date used to set Calendar's time
 * @param val
 *            A value to be set into Calendar
 * @param field
 *            A key specifies which field will the value is set to
 * @return an adjusted java.util.Date
 */
public static Date add(java.util.Date d, int val, int field) {
Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.add(field, val);

return cal.getTime();
}

/**
 * Return day of week
 * 
 * @param dd
 *            Specifies a date's day
 * @param mm
 *            Specifies a date's month
 * @param yyyy
 *            Specifies a date's year
 * @return day of week
 */
public static int dayOfWeek(int dd, int mm, int yyyy) {
if (mm < 3) {
mm += 13;
yyyy--;
} else {
mm++;
}

return (((dd + (int) ((26 * mm) / 10) + yyyy + (int) (yyyy / 4))
- (int) (yyyy / 100) + (int) (yyyy / 400) + 5) % 7) + 1;
}

/**
 * Return day of year
 * 
 * @param dd
 *            Specifies a date's day
 * @param mm
 *            Specifies a date's month
 * @param yyyy
 *            Specifies a date's year
 * @return day of year
 */
public static int dayOfYear(int dd, int mm, int yyyy) {
if (mm == 1) {
return dd;
}

return DAY_OF_YEAR[mm - 2] + (((mm > 2) && isLeapYear(yyyy)) ? 1 : 0)
+ dd;
}

/**
 * Return the number of days in a specified month and year mm is 1 to 12
 * return ranged from 28 to 31
 * 
 * @param mm
 *            Specifies a date's month
 * @param yyyy
 *            Specifies a date's year
 * @return the number of days in a specified month and year
 */
public static int daysInMonth(int mm, int yyyy) {
return DAYS_IN_MONTH[mm - 1]
+ (((mm == 2) && isLeapYear(yyyy)) ? 1 : 0);
}

/**
 * 格式化时间为yyyy-MM-dd.
 * 
 * @param d
 *            Date.
 * @return String
 */
public static Date toFormatDate(java.util.Date d)throws Exception {
String date=SDF_DATE.format(d);
return SDF_DATE.parse(date);
}

/**
 * 格式化时间为yyyy-MM-dd.
 * 
 * @param d
 *            Date.
 * @return String
 */
public static String formatDate(java.util.Date d) {
return d != null ? SDF_DATE.format(d) : "";
}

/**
 * 格式化时间为yyyyMMdd.
 * 
 * @param d
 *            Date.
 * @return String
 */
public static String formatDateNO(java.util.Date d) {
return d != null ? SDF_DATENO.format(d) : "";
}

/**
 * 格式化时间为yyyy-MM-dd HH:mm:ss.
 * 
 * @param d
 *            Date.
 * @return String
 */
public static String formatDateTime(java.util.Date d) {
return d != null ? SDF_DATETIME.format(d) : "";
}

/**
 * 格式化时间为yyyyMMddHHmmss
 * 
 * @param d
 *            Date.
 * @return String
 */
public static String formatTimeToString(java.util.Date d) {
return d != null ? SDF_DATE_TIME.format(d) : "";
}

/**
 * 格式化时间为yyMMddHHmmssSSS.
 * 
 * @param d
 *            Date.
 * @return String
 */
public static String formatLongString(java.util.Date d) {
return d != null ? SDF_LONGSTRING.format(d) : "";
}

/**
 * 格式化时间为MMMM dd, yyyy, EEE. hh:mm a.
 * 
 * @param d
 *            Date.
 * @return String
 */
public static String formatLongDateTime(java.util.Date d) {
return d != null ? SDF_LONGDATETIME.format(d) : "";
}

/**
 * 格式化时间为yyyy-MM-dd HH:mm.
 * 
 * @param d
 *            Date.
 * @return String
 */
public static String formatShortDateTime(java.util.Date d) {
return d != null ? SDF_SHORTDATETIME.format(d) : "";
}

/**
 * 格式化时间为HH:mm:ss.
 * 
 * @param d
 *            Date.
 * @return String
 */
public static String formatTime(java.util.Date d) {
return d != null ? SDF_TIME.format(d) : "";
}

static Calendar getCalendar() {
return Calendar.getInstance();
}

static Calendar getCalendar(int year, int month, int date, int hour,
int minute, int second, int millisecond) {
Calendar cal = getCalendar();
cal.set(year, month - 1, date, hour, minute, second);
cal.set(Calendar.MILLISECOND, millisecond);

return cal;
}

/**
 * Return an java.util.Date of current time
 * 
 * @return an java.util.Date of current time
 */
public static Date getDate() {
return getCalendar().getTime();
}

/**
 * Return an java.util.Date of a given time
 * 
 * @param year
 *            the value used to set the YEAR time field.
 * @param month
 *            the value used to set the MONTH time field
 * @param date
 *            the value used to set the DATE time field.
 * @return an java.util.Date of a given time
 */
public static Date getDate(int year, int month, int date) {
return getCalendar(year, month, date, 0, 0, 0, 0).getTime();
}

/**
 * Return an java.util.Date of a given time
 * 
 * @param year
 *            the value used to set the YEAR time field.
 * @param month
 *            the value used to set the MONTH time field
 * @param date
 *            the value used to set the DATE time field.
 * @param hour
 *            the value used to set the HOUR_OF_DAY time field.
 * @param minute
 *            the value used to set the MINUTE time field.
 * @param second
 *            the value used to set the SECOND time field.
 * @return an java.util.Date of a given time
 */
public static Date getDate(int year, int month, int date, int hour,
int minute, int second) {
return getCalendar(year, month, date, hour, minute, second, 0)
.getTime();
}


}

这个日期工具类里面有你想要的各种日期格式转化方法 --------------------编程问答-------------------- 好吧,现在明白你的意思了.

DATETIME类型:NOW()函数以'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。不支持使用系统默认值。

DATE类型:CURDATE()以'YYYY-MM-DD'的格式返回今天的日期,可以直接存到DATE字段中。不支持使用系统默认值。

TIME类型:CURTIME()以'HH:MM:SS'的格式返回当前的时间,可以直接存到TIME字段中。不支持使用系统默认值。

要想达到你那样的,有难度. --------------------编程问答-------------------- 问题都没有整明白就瞎回,抢婚呀?
LZ,mysql中是datetime类型,请问是如何访问数据库的,如果有用框架,那这不是问题,
在实体类中定义该字段属性的类型为 Timestamp ,
还可以干脆将其定义为String 类型,啥事都好办。
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,