如何创建没有时间戳的java日期对象

时间:2014-05-23 05:46:29

标签: java date timezone simpledateformat

我想创建一个没有TimeZone的Date对象(例如:2007-06-21)。这可能吗?

当我使用以下方法时,它打印如Thu Jun 21 00:00:00 GMT 2007

SimpleDateFormat  sdf       = new SimpleDateFormat("yyyy-MM-dd");

TimeZone          timeZone  = TimeZone.getTimeZone("GMT");
timeZone.setDefault(timeZone);
sdf.setTimeZone(timeZone);

Date              pickUpDate = sdf.parse("2007-06-21");
System.out.println(pickUpDate);

7 个答案:

答案 0 :(得分:5)

如果您想格式化日期,则需要使用DateFormat或类似内容。 Date只是的瞬间 - 自Unix纪元以来的毫秒数。它不知道时区,日历系统或格式。 toString()方法始终使用系统本地时区,并始终以默认方式对其进行格式化。来自documentation

  

将此Date对象转换为以下形式的字符串:

     

dow mon dd hh:mm:ss zzz yyyy

所以它的行为完全符合记录。

您已经拥有格式正确的DateFormat,因此您只需要在其上调用format

System.out.println("pickUpDate" + sdf.format(pickUpDate));

当然,在你的样本中它没有多大意义,因为你只是解析它 - 但可能你通常会先将日期传递给它。

请注意,如果这是与数据库的交互,最好不要将其作为字符串传递。在尽可能多的时间内将值保留为“本机”表示,并使用PreparedStatement.setDate之类的内容将其传递给数据库。

顺便说一句,如果您可以可能更改为使用Joda Time或Java 8(java.time.*)中的新日期/时间API,那么您将更加顺畅与日期/时间相关的任何时间。 Date / Calendar API确实非常糟糕。

答案 1 :(得分:1)

这是toString()

java.util.Date
    public String toString() {

        // "EEE MMM dd HH:mm:ss zzz yyyy";
        BaseCalendar.Date date = normalize();

        StringBuilder sb = new StringBuilder(28);
        int index = date.getDayOfWeek();
        if (index == gcal.SUNDAY) {
            index = 8;
        }

        convertToAbbr(sb, wtb[index]).append(' ');            // EEE
        convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' ');  // MMM
        CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd

        CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':');   // HH
        CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
        CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss

        TimeZone zi = date.getZone();
        if (zi != null) {
            sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
        } else {
            sb.append("GMT");
        }

        sb.append(' ').append(date.getYear());  // yyyy

        return sb.toString();
    }

因此,如果您传递日期并尝试打印日期,则会一直打印出来。

答案 2 :(得分:1)

代码:

Date date = new Date();     
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));

日期:Fri Apr 29 04:53:16 GMT 2016

示例输出:2016-04-29

所需进口商品:

import java.util.Date; //for new Date()
import java.text.SimpleDateFormat; // for the format change

答案 3 :(得分:0)

System.out.println("pickUpDate " + sdf.format(pickUpDate));

您可以使用上面的代码将Date格式化为String

答案 4 :(得分:0)

Date不是约会对象。这是一个时间戳。那是一些令人印象深刻的API设计,不是吗?

您需要的类型现在是java.time.LocalDate,在Java 8中添加。

如果您不能使用Java 8,则可以使用ThreeTen,这是Java 7的后端。

答案 5 :(得分:0)

使用此代码:

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date pickUpDate =sdf.parse("2007-06-21");
System.out.println("pickUpDate "+sdf.format(pickUpDate));

希望它能帮到你。

答案 6 :(得分:0)

 String your_format_date=sdf.format(pickUpDate);
 System.out.println("pick Up Date " + your_format_date);