Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字符串到日期的转换_Java_String_Date_Time_Data Conversion - Fatal编程技术网

Java字符串到日期的转换

Java字符串到日期的转换,java,string,date,time,data-conversion,Java,String,Date,Time,Data Conversion,用Java将格式为“2010年1月2日”的字符串转换为日期的最佳方法是什么 最后,我想把月、日和年分成整数,这样我就可以使用 Date date = new Date(); date.setMonth().. date.setYear().. date.setDay().. date.setlong currentTime = date.getTime(); 将日期转换为时间。这是一条艰难的道路,那些java.util.datesetter方法自java 1.1(1997)以来就被弃用了 在“

用Java将格式为“2010年1月2日”的
字符串
转换为
日期
的最佳方法是什么

最后,我想把月、日和年分成整数,这样我就可以使用

Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();

将日期转换为时间。

这是一条艰难的道路,那些
java.util.date
setter方法自java 1.1(1997)以来就被弃用了

在“2010年1月2日”作为输入字符串的特定情况下:

  • “一月”是全文月份,因此使用
    MMMM
    模式
  • “2”是一个月中较短的一天,因此使用
    d
    模式
  • “2010”是4位数的年份,因此使用
    yyyy
    模式
  • 请注意显式
    Locale
    参数的重要性。如果省略它,那么它将使用输入字符串的月份名称中使用的不一定是英语的。如果区域设置与输入字符串不匹配,那么即使格式模式似乎有效,您也会混淆地得到一个
    java.text.ParseException

    下面是从中提取的相关性,列出了所有可用的格式模式:

    书信 日期或时间组件 演示 例子
    G
    纪元指示符 正文 公元
    y
    年 年 1996; 96
    Y
    周年 年 2009; 09
    M
    /
    L
    月份 月 七月,;7月;07
    w
    年复一年 数 27
    W
    周而复始 数 2.
    D
    年复一年 数 189
    d
    月日 数 10
    F
    月份中的星期几 数 2.
    E
    一周中的一天 正文 星期二;星期二
    u
    周数 数 1.
    a
    上午/下午标记 正文 颗粒物
    H
    一天中的小时数(0-23) 数 0
    k
    一天中的小时数(1-24) 数 24
    K
    上午/下午的小时数(0-11) 数 0
    h
    上午/下午的小时数(1-12) 数 12
    m
    分秒必争 数 30
    s
    分秒 数 55
    S
    毫秒 数 978
    z
    时区 一般时区 太平洋标准时间;PST;GMT-08:00
    Z
    时区 RFC 822时区 -0800
    X
    时区 ISO 8601时区 -08; -0800; -08:00
    啊,是的,再次讨论Java日期。为了处理日期操纵,我们使用、、和。例如,使用一月日期作为输入:

    Calendar mydate = new GregorianCalendar();
    String mystring = "January 2, 2010";
    Date thedate = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(mystring);
    mydate.setTime(thedate);
    //breakdown
    System.out.println("mydate -> "+mydate);
    System.out.println("year   -> "+mydate.get(Calendar.YEAR));
    System.out.println("month  -> "+mydate.get(Calendar.MONTH));
    System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
    System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
    System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
    System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
    System.out.println("second -> "+mydate.get(Calendar.SECOND));
    System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
    System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
    System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));
    
    然后,您可以使用以下方法来处理该问题:

    Calendar now = Calendar.getInstance();
    mydate.set(Calendar.YEAR,2009);
    mydate.set(Calendar.MONTH,Calendar.FEBRUARY);
    mydate.set(Calendar.DAY_OF_MONTH,25);
    mydate.set(Calendar.HOUR_OF_DAY,now.get(Calendar.HOUR_OF_DAY));
    mydate.set(Calendar.MINUTE,now.get(Calendar.MINUTE));
    mydate.set(Calendar.SECOND,now.get(Calendar.SECOND));
    // or with one statement
    //mydate.set(2009, Calendar.FEBRUARY, 25, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), now.get(Calendar.SECOND));
    System.out.println("mydate -> "+mydate);
    System.out.println("year   -> "+mydate.get(Calendar.YEAR));
    System.out.println("month  -> "+mydate.get(Calendar.MONTH));
    System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
    System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
    System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
    System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
    System.out.println("second -> "+mydate.get(Calendar.SECOND));
    System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
    System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
    System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));
    

    在处理SimpleDataFormat类时,重要的是要记住Date不是线程安全的,不能与多个线程共享一个Date对象


    “m”和“m”之间也有很大的区别,其中小格表示分钟,大写字母表示月份。与“d”和“d”相同。这可能会导致微妙的错误,而这些错误往往会被忽略。有关更多详细信息,请参阅或。

    此外,SimpleDataFormat在某些客户端技术中不可用,如

    选择Calendar.getInstance()是个好主意,您的需求是比较两个日期;去约会

    String str_date = "11-June-07";
    DateFormat formatter = new SimpleDateFormat("dd-MMM-yy");
    Date date = formatter.parse(str_date);
    

    这对我来说很好。

    虽然有些答案在技术上是正确的,但它们是不可取的

    • 众所周知,java.util.Date和Calendar类非常麻烦。由于设计和实现中的缺陷,请避免它们。幸运的是,我们可以选择另外两个优秀的日期时间库:

      • 这个流行的开源免费库可以跨多个Java版本使用。在StackOverflow上可以找到它的许多用法示例。阅读其中的一些内容将有助于你快速跟上进度

      • 这组新类的灵感来源于Joda Time,并由JSR 310定义。这些类内置于Java8中。正在进行一个项目,将这些类向后移植到Java7,但Oracle不支持这种向后移植
    • 正如克里斯托弗·约翰逊(Kristopher Johnson)在对该问题的评论中正确指出的那样,其他答案忽略了以下重要问题:
      • 时间(日期既有日期部分,也有时间部分)
      • 时区
        一天的开始取决于时区。如果无法指定时区,则应用JVM的默认时区。这意味着在其他计算机上运行或使用修改的时区设置时,代码的行为可能会更改。可能不是你想要的
      • 区域设置
        区域设置的语言指定如何解释解析过程中遇到的单词(月和日的名称)。另外,当生成日期时间的字符串表示形式时,区域设置会影响某些格式化程序的输出
    乔达时间 下面是关于乔达时间的一些注释

    时区 在中,对象确实知道自己指定的时区。这与java.util.Date类形成对比,后者似乎有时区,但没有时区

    请注意,在下面的示例代码中,我们如何将时区对象传递给解析字符串的格式化程序。该时区用于将该日期时间解释为发生在该时区内。因此,您需要考虑并确定由该字符串输入表示的时区

    由于输入字符串中没有时间部分,Joda time将指定时区当天的第一个时刻指定为一天中的时间。通常这意味着
    00:00:00
    ,但并非总是如此,因为存在异常或其他异常。顺便说一下,您可以通过调用
    withTimeAtStartOfDay
    对任何DateTime实例执行相同的操作

    格式化程序模式 格式化程序模式中使用的字符在Joda Time中与java.util.Date/Calendar中的字符相似,但并不完全相同。仔细阅读文件

    不变性 在Joda时代,我们通常使用不可变类。我们不是修改现有的日期时间对象,而是调用一些方法,这些方法基于另一个对象创建一个新的新实例,并复制了大多数方面,除了需要修改的地方
    String str_date = "11-June-07";
    DateFormat formatter = new SimpleDateFormat("dd-MMM-yy");
    Date date = formatter.parse(str_date);
    
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date date;
    try {
        date = dateFormat.parse("2013-12-4");
        System.out.println(date.toString()); // Wed Dec 04 00:00:00 CST 2013
    
        String output = dateFormat.format(date);
        System.out.println(output); // 2013-12-04
    } 
    catch (ParseException e) {
        e.printStackTrace();
    }
    
    org.joda.time.DateTime dateTime = new DateTime( date, timeZone );
    
    java.util.Date date = dateTime.toDate();
    
    String input = "January 2, 2010";
    
    java.util.Locale locale = java.util.Locale.US;
    DateTimeZone timeZone = DateTimeZone.forID( "Pacific/Honolulu" ); // Arbitrarily chosen for example.
    DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMMM d, yyyy" ).withZone( timeZone ).withLocale( locale );
    DateTime dateTime = formatter.parseDateTime( input );
    
    System.out.println( "dateTime: " + dateTime );
    System.out.println( "dateTime in UTC/GMT: " + dateTime.withZone( DateTimeZone.UTC ) );
    
     String str = "January 2nd, 2010";
    
    // if we 2nd even we have changed in pattern also it is not working please workout with 2nd 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM Q, yyyy", Locale.ENGLISH);
    LocalDate date = LocalDate.parse(str, formatter);
    
    // access date fields
    int year = date.getYear(); // 2010
    int day = date.getDayOfMonth(); // 2
    Month month = date.getMonth(); // JANUARY
    int monthAsInt = month.getValue(); // 1
    
    LocalDateTime dateWithTime = LocalDateTime.parse(strWithDateAndTime, dateTimeFormatter);
    ZonedDateTime zoned = ZonedDateTime.parse(strWithTimeZone, zoneFormatter);
    
    All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. 
    The following pattern letters are defined:
    
    Symbol  Meaning                     Presentation      Examples
    ------  -------                     ------------      -------
     G       era                         text              AD; Anno Domini; A
     u       year                        year              2004; 04
     y       year-of-era                 year              2004; 04
     D       day-of-year                 number            189
     M/L     month-of-year               number/text       7; 07; Jul; July; J
     d       day-of-month                number            10
    
     Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
     Y       week-based-year             year              1996; 96
     w       week-of-week-based-year     number            27
     W       week-of-month               number            4
     E       day-of-week                 text              Tue; Tuesday; T
     e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
     F       week-of-month               number            3
    
     a       am-pm-of-day                text              PM
     h       clock-hour-of-am-pm (1-12)  number            12
     K       hour-of-am-pm (0-11)        number            0
     k       clock-hour-of-am-pm (1-24)  number            0
    
     H       hour-of-day (0-23)          number            0
     m       minute-of-hour              number            30
     s       second-of-minute            number            55
     S       fraction-of-second          fraction          978
     A       milli-of-day                number            1234
     n       nano-of-second              number            987654321
     N       nano-of-day                 number            1234000000
    
     V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
     z       time-zone name              zone-name         Pacific Standard Time; PST
     O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
     X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
     x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
     Z       zone-offset                 offset-Z          +0000; -0800; -08:00;
    
    package be.test.package.time;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.TimeZone;
    
    public class TimeWork {
    
        public static void main(String[] args) {    
    
            TimeZone timezone = TimeZone.getTimeZone("UTC");
    
            List<Long> longs = new ArrayList<>();
            List<String> strings = new ArrayList<>();
    
            //Formatting a date needs a timezone - otherwise the date get formatted to your system time zone.
            //Use 24h format HH. In 12h format hh can be in range 0-11, which makes 12 overflow to 0.
            DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS");
            formatter.setTimeZone(timezone);
    
            Date now = new Date();
    
            //Test dates
            strings.add(formatter.format(now));
            strings.add("01-01-1970 00:00:00.000");
            strings.add("01-01-1970 00:00:01.000");
            strings.add("01-01-1970 00:01:00.000");
            strings.add("01-01-1970 01:00:00.000");
            strings.add("01-01-1970 10:00:00.000");
            strings.add("01-01-1970 12:00:00.000");
            strings.add("01-01-1970 24:00:00.000");
            strings.add("02-01-1970 00:00:00.000");
            strings.add("01-01-1971 00:00:00.000");
            strings.add("01-01-2014 00:00:00.000");
            strings.add("31-12-1969 23:59:59.000");
            strings.add("31-12-1969 23:59:00.000");
            strings.add("31-12-1969 23:00:00.000");
    
            //Test data
            longs.add(now.getTime());
            longs.add(-1L);
            longs.add(0L); //Long date presentation at - midnight 1/1/1970 UTC - The timezone is important!
            longs.add(1L);
            longs.add(1000L);
            longs.add(60000L);
            longs.add(3600000L);
            longs.add(36000000L);
            longs.add(43200000L);
            longs.add(86400000L);
            longs.add(31536000000L);
            longs.add(1388534400000L);
            longs.add(7260000L);
            longs.add(1417706084037L);
            longs.add(-7260000L);
    
            System.out.println("===== String to long =====");
    
            //Show the long value of the date
            for (String string: strings) {
                try {
                    Date date = formatter.parse(string);
                    System.out.println("Formated date : " + string + " = Long = " + date.getTime());
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
    
            System.out.println("===== Long to String =====");
    
            //Show the date behind the long
            for (Long lo : longs) {
                Date date = new Date(lo);
                String string = formatter.format(date);
                System.out.println("Formated date : " + string + " = Long = " + lo);        
            }
        }
    }
    
    ===== String to long =====
    Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
    Formated date : 01-01-1970 00:00:00.000 = Long = 0
    Formated date : 01-01-1970 00:00:01.000 = Long = 1000
    Formated date : 01-01-1970 00:01:00.000 = Long = 60000
    Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
    Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
    Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
    Formated date : 01-01-1970 24:00:00.000 = Long = 86400000
    Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
    Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
    Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
    Formated date : 31-12-1969 23:59:59.000 = Long = -1000
    Formated date : 31-12-1969 23:59:00.000 = Long = -60000
    Formated date : 31-12-1969 23:00:00.000 = Long = -3600000
    ===== Long to String =====
    Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
    Formated date : 31-12-1969 23:59:59.999 = Long = -1
    Formated date : 01-01-1970 00:00:00.000 = Long = 0
    Formated date : 01-01-1970 00:00:00.001 = Long = 1
    Formated date : 01-01-1970 00:00:01.000 = Long = 1000
    Formated date : 01-01-1970 00:01:00.000 = Long = 60000
    Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
    Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
    Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
    Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
    Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
    Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
    Formated date : 01-01-1970 02:01:00.000 = Long = 7260000
    Formated date : 04-12-2014 15:14:44.037 = Long = 1417706084037
    Formated date : 31-12-1969 21:59:00.000 = Long = -7260000
    
    date="2016-05-06 16:40:32";
    
    public static String setDateParsing(String date) throws ParseException {
    
        // This is the format date we want
        DateFormat mSDF = new SimpleDateFormat("hh:mm a");
    
        // This format date is actually present
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-mm-dd hh:mm");
        return mSDF.format(formatter.parse(date));
    }
    
    String date = get_pump_data.getString("bond_end_date");
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
    Date datee = (Date)format.parse(date);
    
    Thu Jul 26 15:54:13 GMT+05:30 2018
    
    String oldDate = "Thu Jul 26 15:54:13 GMT+05:30 2018";
    DateFormat format = new SimpleDateFormat("EEE LLL dd HH:mm:ss Z yyyy");
    Date updateLast = format.parse(oldDate);
    
    private Date StringtoDate(String date) throws Exception {
                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
                java.sql.Date sqlDate = null;
                if( !date.isEmpty()) {
    
                    try {
                        java.util.Date normalDate = sdf1.parse(date);
                        sqlDate = new java.sql.Date(normalDate.getTime());
                    } catch (ParseException e) {
                        throw new Exception("Not able to Parse the date", e);
                    }
                }
                return sqlDate;
            }
    
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
      Date date1 = null;
      Date date2 = null;
    
      try {
        date1 = dateFormat.parse(t1);
        date2 = dateFormat.parse(t2);
      } catch (ParseException e) {
        e.printStackTrace();
      }
      DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
      String StDate = formatter.format(date1);
      String edDate = formatter.format(date2);
    
      System.out.println("ST  "+ StDate);
      System.out.println("ED "+ edDate);
    
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
    return sdf.format(date);
    
    SimpleDateFormat sdf = new SimpleDateFormat(datePattern); 
    return sdf.parse(dateStr);
    
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat newSdf = new SimpleDateFormat("dd-MM-yyyy");
    Date temp = sdf.parse(dateStr);
    return newSdf.format(temp);