代码之家  ›  专栏  ›  技术社区  ›  Paresh Mayani jeet

从日期获取毫秒时出现问题

  •  0
  • Paresh Mayani jeet  · 技术社区  · 15 年前

    我有一个字符串格式的日期 25 November 2010 我正在尝试获取该日期的毫秒数,为此我已经完成了以下代码:

    strDateSelcted = "25 November 2010" // Actually i am receiving date in this format
    SimpleDateFormat curFormater = new SimpleDateFormat("dd MMM yyyy"); 
     try {
        Date dateObj = curFormater.parse(strDateSelcted);
    
            insertEventtoCalendar(dateObj.getTime());   // Actually insert an event onto the native calendar
    
      } catch (ParseException e) {
        // TODO Auto-generated catch block
            e.printStackTrace();
     } 
    

    但是,当我尝试运行应用程序时,它会在插入日期的前一天创建一个事件,即对于2010年11月25日,它会在2010年11月24日插入事件,对于2010年11月27日,它会在2010年11月26日插入事件,同样如此。

    我在哪里犯了错误????请告诉我正确的方法

    4 回复  |  直到 14 年前
        1
  •  2
  •   Buhake Sindi Tesnep    15 年前

    要设置日期格式化程序使用的时区,请调用setTimeZone方法 例如

    curFormater.setTimeZone(TimeZone.getTimeZone("UTC"));
    
        2
  •  1
  •   Buhake Sindi Tesnep    15 年前

    首先,你的约会模式是错误的,使用 dd MMMM yyyy . MMM 分析和返回 Nov (不是 November ).

    另外,由于日期字符串中没有毫秒,因此毫秒将设置为 0 .

    看到Jon Skeet向我更新了这个问题,这可能是时区问题(正如他所提到的)。对不起,误会了。

    测试代码:

    /**
     * 
     */
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * @author The Elite Gentleman
     *
     */
    public class Test {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            try {
                String date = "25 November 2010";
                SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy");
                Date d = sdf.parse(date);
                System.out.println(d.getTime());
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    

    价值: 1290636000000

        3
  •  0
  •   Jon Skeet    15 年前

    几乎可以肯定这是一个时区问题。检查您的时区 SimpleDateFormat 正在使用,并且您的手机正在使用它来显示事件。

    出于诊断目的,我建议您记录 dateObj.getTime() 你可以查一下 确切地 这在台式机上意味着什么。

        4
  •  0
  •   Buhake Sindi Tesnep    15 年前

    使用 Locale.getDefault() 当你使用 SimpleDateFormat 我希望它能解决你的问题。