【问题标题】:how to convert string into time format and add two hours [duplicate]如何将字符串转换为时间格式并添加两个小时[重复]
【发布时间】:2009-04-17 04:31:56
【问题描述】:

我在项目中有以下需求。

我有一个名称为startDate 的输入字段,用户以YYYY-MM-DD HH:MM:SS 的格式输入。 我需要为 startDate 字段中的用户输入添加两个小时。我该怎么做。

提前致谢

【问题讨论】:

  • 误读为“stardate”。我什至不喜欢星际迷航。

标签: java datetime


【解决方案1】:

试试这个,我测试了,效果很好

Date date = null;
String str = "2012/07/25 12:00:00";
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
date = formatter.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR, 2);
System.out.println(calendar.getTime());  // Output : Wed Jul 25 14:00:00 IST 2012

如果你想转换你的输入类型而不是添加这个代码

formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
str=formatter.format(calendar.getTime());
System.out.println(str);  // Output : 2012-07-25 14:00:00

【讨论】:

    【解决方案2】:

    您可以使用 SimpleDateFormat 将字符串转换为日期。之后你有两个选择,

    • 制作一个日历对象,然后用它来增加两个小时,或者
    • 从该日期对象获取时间(以毫秒为单位),并添加两个小时,例如 (2 * 60 * 60 * 1000)

      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      
      // replace with your start date string
      Date d = df.parse("2008-04-16 00:05:05"); 
      Calendar gc = new GregorianCalendar();
      gc.setTime(d);
      gc.add(Calendar.HOUR, 2);
      Date d2 = gc.getTime();
      

      或者,

      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      
      // replace with your start date string
      Date d = df.parse("2008-04-16 00:05:05");
      Long time = d.getTime();
      time +=(2*60*60*1000);
      Date d2 = new Date(time);
      

    看看这些教程。

    【讨论】:

      【解决方案3】:

      这将为您提供所需的时间(例如:21:31 PM)

      //Add 2 Hours to just TIME
      SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss a");
      Date date2 = formatter.parse("19:31:51 PM");
      Calendar cal2 = Calendar.getInstance();
      cal2.setTime(date2);
      cal2.add(Calendar.HOUR_OF_DAY, 2);
      SimpleDateFormat printTimeFormat = new SimpleDateFormat("HH:mm a");
      System.out.println(printTimeFormat.format(cal2.getTime())); 
      

      【讨论】:

        【解决方案4】:

        tl;博士

        LocalDateTime.parse( 
            "2018-01-23 01:23:45".replace( " " , "T" )  
        ).plusHours( 2 )
        

        java.time

        现代方法使用添加到 Java 8、Java 9 及更高版本的 java.time 类。

        用户输入格式为 YYYY-MM-DD HH:MM:SS

        将该输入字符串解析为日期时间对象。您的格式接近于符合标准 ISO 8601 格式,默认情况下在 java.time 类中用于解析/生成字符串。要完全遵守,请将中间的空格替换为T

        String input = "2018-01-23 01:23:45".replace( " " , "T" ) ; // Yields: 2018-01-23T01:23:45
        

        解析为LocalDateTime,因为您的输入缺少任何时区指示符或与 UTC 的偏移量。

        LocalDateTime ldt = LocalDateTime.parse( input ) ;
        

        增加两个小时

        java.time 类可以为您计算。

        LocalDateTime twoHoursLater = ldt.plusHours( 2 ) ;
        

        时区

        请注意,LocalDateTime 确实代表时间线上的一个点。如果没有时区的上下文或与 UTC 的偏移量,它就没有真正的意义。名称的“本地”部分表示任何 地区或 地区,而不是任何一个特定地区。仅仅说“1 月 21 日中午”可能意味着新西兰奥克兰的中午,这比法国巴黎的中午早几个小时。

        要定义实际力矩,您必须指定区域或偏移量。

        ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
        ZonedDateTime zdt = ldt.atZone( z ) ;  // Define an actual moment, a point on the timeline by giving a context with time zone.
        

        如果您确定预期的时区,请在添加两个小时之前应用它LocalDateTime 类在进行数学运算时假定简单的通用 24 小时工作日。但在不同日期的不同时区,天数可能是 23 或 25 小时,也可能是其他长度。因此,为了在分区上下文中获得正确结果,请将小时数添加到您的 ZonedDateTime 而不是 LocalDateTime


        关于java.time

        java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

        Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

        要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

        从哪里获得 java.time 类?

        ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

        【讨论】:

          【解决方案5】:

          作为Joda Time 库的粉丝,您可以通过以下方式使用 Joda DateTime

          import org.joda.time.format.*;
          import org.joda.time.*;
          
          ...    
          
          String dateString = "2009-04-17 10:41:33";
          
          // parse the string
          DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
          DateTime dateTime = formatter.parseDateTime(dateString);
          
          // add two hours
          dateTime = dateTime.plusHours(2); // easier than mucking about with Calendar and constants
          
          System.out.println(dateTime);
          

          如果您在此转换之前/之后仍需要使用java.util.Date 对象,Joda DateTime API 提供了一些简单的toDate()toCalendar() 方法以便于翻译。

          与 Java 日期/日历 API 相比,Joda API 提供了更多便利。

          【讨论】:

          • 每个人都应该是 Joda 的粉丝。我用过的最好的图书馆。 +1
          • 我完全同意 Rob Hruska 和 WolfmanDragon 的观点。这个库使用起来非常简单,我还建议将它添加到需要日期/时间操作的每个 Java 项目中(几乎所有项目:))
          • 我同意 @ruffp 的观点,在 Scala 中创造了奇迹,并且没有括号;-)
          • 仅供参考,Joda-Time 项目现在位于maintenance mode,团队建议迁移到java.time 类。见Tutorial by Oracle
          【解决方案6】:

          使用SimpleDateFormatparse() 方法。此方法将返回一个Date 对象。然后,您可以为此 Date 创建一个 Calendar 对象并为其添加 2 小时。

          SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          Date date = formatter.parse(theDateToParse);
          Calendar cal = Calendar.getInstance();
          cal.setTime(date);
          cal.add(Calendar.HOUR_OF_DAY, 2);
          cal.getTime(); // This will give you the time you want.
          

          【讨论】:

          • 我正在提供代码。请告诉我它是否正确 Calendar EDate = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); EDate.setTime(sdf.parse(enddate)); EDate.add(Calendar.Hour, 1);
          • 您拥有的日期字符串是上午还是下午?因为您已经使用小写 hh 表示小时以及 Calendar.HOUR。我的代码使用你的小时是 24 小时周期。
          【解决方案7】:
          //the parsed time zone offset:
          DateTimeFormatter dateFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
          String fromDateTimeObj = "2011-01-03T12:00:00.000-0800";
          DateTime fromDatetime = dateFormat.withOffsetParsed().parseDateTime(fromDateTimeObj);
          

          【讨论】:

            【解决方案8】:

            两次相加的基本程序:
            您可以根据需要使用 if else 修改小时:分钟:秒。
            该程序向您展示了如何将两个对象的值相加并返回另一个对象。

            class demo
            {private int hour,min,sec;
                void input(int hour,int min,int sec)
                {this.hour=hour;
                this.min=min;
                this.sec=sec;
            
                }
                demo add(demo d2)//demo  because we are returning object
                {   demo obj=new demo();
                obj.hour=hour+d2.hour;
                obj.min=min+d2.min;
                obj.sec=sec+d2.sec;
                return obj;//Returning object and later on it gets allocated to demo d3                    
                }
                void display()
                {
                    System.out.println(hour+":"+min+":"+sec);
                }
                public static  void main(String args[])
                {
                    demo d1=new demo();
                    demo d2=new demo();
                    d1.input(2, 5, 10);
                    d2.input(3, 3, 3);
                    demo d3=d1.add(d2);//Note another object is created
                    d3.display();
            
            
                }
            
            }
            

            修正时间加法

            class demo {private int hour,min,sec; void input(int hour,int min,int sec) {this.hour=(hour>12&&hour<24)?(hour-12):hour; this.min=(min>60)?0:min; this.sec=(sec>60)?0:sec; } demo add(demo d2) { demo obj=new demo(); obj.hour=hour+d2.hour; obj.min=min+d2.min; obj.sec=sec+d2.sec; if(obj.sec>60) {obj.sec-=60; obj.min++; } if(obj.min>60) { obj.min-=60; obj.hour++; } return obj; } void display() { System.out.println(hour+":"+min+":"+sec); } public static void main(String args[]) { demo d1=new demo(); demo d2=new demo(); d1.input(12, 55, 55); d2.input(12, 7, 6); demo d3=d1.add(d2); d3.display(); } }

            【讨论】:

              【解决方案9】:

              此示例是日期时间和时区的总和(字符串值)

              String DateVal = "2015-03-26 12:00:00";
              String TimeVal = "02:00:00";
              
              SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
              SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss");
              
              Date reslt = sdf.parse( DateVal );
              Date timeZ = sdf2.parse( TimeVal );
              //Increase Date Time
              reslt.setHours( reslt.getHours() + timeZ.getHours());
              reslt.setMinutes( reslt.getMinutes() + timeZ.getMinutes());
              reslt.setSeconds( reslt.getSeconds() + timeZ.getSeconds());
              
              System.printLn.out( sdf.format(reslt) );//Result(+2 Hours):  2015-03-26 14:00:00 
              

              谢谢:)

              【讨论】:

                猜你喜欢
                • 2022-06-27
                • 2011-11-18
                • 2012-11-05
                • 1970-01-01
                • 2016-02-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多