【问题标题】:Java: handle time-expressionsJava:处理时间表达式
【发布时间】:2015-02-01 07:37:26
【问题描述】:

我正在使用 Java 后端来存储不同的事件。到目前为止,日期用于存储日期和时间的特定信息。最好允许“更自然”的时间定义,如“下午”、“早上”或“很快”。

是否有任何最佳实践来处理这些灵活/未明确指定但经常使用的时间说明符?是否有一些库可以将它们转换为 Date 对象(反之亦然)?

【问题讨论】:

  • 您必须通过时间定义来定义您的意思。例如,下午在下午 1 点到 4 点之间;早上 8 点到 11 点之间;很快就是在接下来的 3 小时内。一旦你定义了你的词,你就可以自己编写转换。
  • 好的,这很明显。但是有任何标准或库吗?我认为这是一个很常见的任务!
  • 不,不是那么明显。一个应用程序需要将早上定义为凌晨 4 点到早上 7 点,而另一个应用程序(针对青少年)需要将早上定义为下午 1 点到下午 4 点。它取决于应用程序。

标签: java types type-conversion


【解决方案1】:

手工操作怎么样。只需创建一个包装类并使用 AfterNoon、Morning 等值创建一个枚举,并提供一个构造函数,该构造函数采用 Date 对象并根据需要编写逻辑代码。

Class DateWrapper {
      private Date date;
      private DayTime dayTime;

      public DateWrapper (Date date){
         ...
       }


       public enum DayTime {
         Morning, AfterNoon, ...;
        }
}

【讨论】:

    【解决方案2】:

    这取决于您要为这些事情设置的时间,但这里有一个示例:

    import java.util.*;
    import java.text.*;
    
    public class currentTime
    {  public static void main(String[] args)
       {  currentTime a_SmartHello=new currentTime();
          GregorianCalendar todaysDate=new GregorianCalendar();
          int hour,
          minute,
          hour_of_day,
          am_pm;
    
          hour=todaysDate.get(Calendar.HOUR);
          hour_of_day=todaysDate.get(Calendar.HOUR_OF_DAY);
          minute=todaysDate.get(Calendar.MINUTE);
          am_pm=todaysDate.get(Calendar.AM_PM);
    
          a_SmartHello.sayTime(hour,minute,am_pm);
    
          if (hour_of_day<12)
          {  a_SmartHello.sayGoodMorning();
          }
          if (hour_of_day>11 && hour_of_day<17)
          {  a_SmartHello.sayGoodAfternoon();
          }
          if (hour_of_day>=17 && hour_of_day<22)
            a_SmartHello.sayGoodEvening();
          if (hour_of_day>=22)
            a_SmartHello.sayGoodNight();
        }
    
        private void sayGoodMorning()
        {  System.out.println("Good Morning World!");
        }
    
        private void sayGoodAfternoon()
        {  System.out.println("Good Afternoon World!");
        }
    
        private void sayGoodEvening()
        {  System.out.println("Good Evening World!");
        }
    
        private void sayGoodNight()
        {  System.out.println("Good Night World! I'm going to bed!!!!");
        }
    
        private void sayTime(int hour, int minute, int am_pm)
        {  NumberFormat minFormat=NumberFormat.getNumberInstance();
           minFormat.setMinimumIntegerDigits(2);
           String am_pm_string;
    
           if (am_pm==0)
           {  am_pm_string="AM";
           }
           else
           { am_pm_string="PM";
           }
    
           System.out.println("The time is - "+hour+":"+minFormat.format(minute)+am_pm_string);
        }
    }
    

    来自http://my.hsonline.net/~rrosetta/Java/javatutorial.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多