黑马程序员技术交流社区

标题: 关于日期格式化的问题 [打印本页]

作者: 王少岩    时间: 2012-8-14 22:21
标题: 关于日期格式化的问题
本帖最后由 王少岩 于 2012-8-14 22:50 编辑

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd");
String time = sdf.format(new Date());
System.out.println(time);
为什么输出的结果会是乱码?--->2012骞碝8鏈坉14
作者: 乐峰    时间: 2012-8-14 22:37
import java.util.Date;
import java.text.SimpleDateFormat;


public class Datetime {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd");
                 String time = sdf.format(new Date());
                 System.out.println(time);
        }

}
我运行的程序结果是:2012年08月14,没有乱码啊,你是不是应该调试一下你的测试软件的编码语言
作者: 王冰    时间: 2012-8-14 22:42
你是用什么编写代码的,你将你那个编写代码工具的字符编码设置为GBK或者GB2312看看
作者: 王少岩    时间: 2012-8-14 22:49
肯定是字符编码的问题,但我用的是editplus和cmd命令行,editplus的默认编码是utf-8,但是打印的汉字还是乱码。。纠结!!!
作者: 朱志辉    时间: 2012-8-14 23:22
本帖最后由 朱志辉 于 2012-8-14 23:25 编辑

你用的操作系统是中文的,默认编码是GBK,和你用EditPlus编辑的UTF-8编码没有包含关系,在“javac Xxx.java”的时候是按照默认编码(GBK)来编译的。当你“java Xxx”时,由于之前使用了错误的编码来编译,所以运行时打印出的中文是乱码的。
你应该在javac的时候给其指定编码,即“java -encoding "utf-8" Xxx.java”,这样再java运行就没有问题了。
作者: 张忠豹    时间: 2012-8-14 23:27
  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. /**
  6. * 说明:日期常用工具类
  7. */
  8. public class DateUtil {
  9.     /**
  10.      * 将日期转成yyyy-mm-dd 型字符串
  11.      *
  12.      * @param date
  13.      * @return String
  14.      */
  15.     public static String dateToStr(Date date) {
  16.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  17.         if (date != null) {
  18.             return sdf.format(date);
  19.         } else {
  20.             return null;
  21.         }
  22.     }

  23.     public static Date strToDate(String str) {
  24.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  25.         Date d = null;
  26.         try {
  27.             d = sdf.parse(str);
  28.         } catch (ParseException e) {
  29.             e.printStackTrace();
  30.         }
  31.         return d;
  32.     }


  33.      /**
  34.      * 将日期转成yyyy-mm-dd 型字符串
  35.      *
  36.      * @param date
  37.      * @return String
  38.      */
  39.     public static String dateToStrTwo(Date date) {
  40.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
  41.         if (date != null) {
  42.             return sdf.format(date);
  43.         } else {
  44.             return null;
  45.         }
  46.     }
  47.     /**
  48.      * 返回输入日期的三个月之后的日期
  49.      *
  50.      * @param date
  51.      * @return date
  52.      */
  53.     public static Date afterThreeDate(Date date) {
  54.         Calendar cal = Calendar.getInstance();
  55.         cal.setTime(date);
  56.         cal.add(Calendar.MONTH, 3);
  57.         return cal.getTime();
  58.     }

  59.     /**
  60.      * 返回当前日期的三个月之前的日期
  61.      *
  62.      * @return date
  63.      */
  64.     public static Date beforeThreeMonth() {
  65.         Calendar cal = Calendar.getInstance();
  66.         cal.setTime(new Date());
  67.         cal.add(Calendar.MONTH, -3);
  68.         return cal.getTime();
  69.     }
  70.     /**
  71.      * 返回输入日期的i年之后的日期
  72.      *
  73.      * @param date
  74.      * @param i
  75.      * @return date
  76.      */
  77.     public static Date afterNYear(Date date, int i) {
  78.         Calendar cal = Calendar.getInstance();
  79.         cal.setTime(date);
  80.         cal.add(Calendar.YEAR, i);
  81.         return cal.getTime();
  82.     }


  83.     /**
  84.      * 返回当前年的字符串形式
  85.      *
  86.      * @return yyyy
  87.      */
  88.     public static String getCurYear() {
  89.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  90.         return sdf.format(new Date()).substring(0, 4);
  91.     }

  92.     /**
  93.      * 返回当前月的字符串形式
  94.      *
  95.      * @return MM
  96.      */
  97.     public static String getCurMonth() {
  98.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  99.         return sdf.format(new Date()).substring(5, 7);
  100.     }
  101.     /**
  102.      * 返回两个日期相差的天数
  103.      *
  104.      * @return date
  105.      */
  106.     public static int dateValue(Date date1, Date date2) {
  107.         return (int) ((date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24));
  108.     }

  109. }

  110. //以后发现要转换的时候,可以参考这么一个DateUtil
复制代码

作者: 王少岩    时间: 2012-8-14 23:29
朱志辉 发表于 2012-8-14 23:22
你用的操作系统是中文的,默认编码是GBK,和你用EditPlus编辑的UTF-8编码没有包含关系,在“javac Xxx.java ...

嗯,这样是没有乱码问题了,但是难道每次运行都要加-encoding utf-8吗?我看毕老师的视频里就是只用的java命令而没加参数啊,照样能打印中文,这又是咋整的
作者: 朱志辉    时间: 2012-8-14 23:58
王少岩 发表于 2012-8-14 23:29
嗯,这样是没有乱码问题了,但是难道每次运行都要加-encoding utf-8吗?我看毕老师的视频里就是只用的jav ...


他用的是GBK编码(记事本另存为见到的ANSI编码方式就是)。EditPlus的编码可以改的,在保存为另存为或者在菜单“首选项 - 文件 - 默认编码方式”处改。如果直接用记事本编辑,默认就是GBK。
作者: 王少岩    时间: 2012-8-15 00:03
嗯,谢谢大神们,问题以解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2