从表中查找“日期”

时间:2018-05-01 18:48:47

标签: calendar tabular

我想创建一个“表格”,就像一个日历,所有月份和日期都是1-31。但我想要做的是:如果用户选择一个月和一天它必须给你一个数字(不是随机的)例如

Days | Ene | Feb | Mar
----------------------
1   | A1 | A4  | A7
---------------------
2   | A2  | A5  | A8
---------------------
3   | A3  | A6  | A9
---------------------

如果用户编写或选择Ene 1,他将获得A1或2月2日,将获得A5(依此类推)。这就是问题,我该如何构建呢? PHP? JavaScript的? Java的?使用SQL / DataBases?

1 个答案:

答案 0 :(得分:0)

tl; dr

map.get( Month.FEBRUARY ).get( 2 - 1 )
  

A5

Java

Month枚举

首先,您应该知道Java在Month枚举中为月预定义了一组12个对象。顺便说一下,Java中的枚举功能比大多数语言中的通用功能强大和灵活得多。您可能想learn more

顺便说一句,您可以要求Month类通过getDisplayName方法自动本地化月份名称。

List

您的数字恰好是1、2、3,因此我们可以使用它们来访问List

不幸的是,对List的访问仅作为索引提供,这意味着从0开始的计数(不幸的是,从编程的早期开始就存在宿醉)。因此,我们必须从月份中减去一个。例如,对于第一个,使用0,对于第二个,使用1。

Map

我们可以使用Map将每个月映射到其值列表。

集合文字

Java 9带来了方便的新Map.ofEntriesList.of方法,用于简洁地生成不可修改的集合。

Map< Month, List< String > > map = 
    Map.ofEntries(
        entry( Month.JANUARY , List.of( "A1" , "A2" , "A3" ) ) ,  // This syntax requires at top:    import static java.util.Map.entry ;
        entry( Month.FEBRUARY , List.of( "A4" , "A5" , "A6" ) ) ,
        entry( Month.MARCH , List.of( "A7" , "A8" , "A9" ) )
    )
;

访问MapList

尝试一下。模拟用户输入的月份和日期。

Month m = Month.FEBRUARY;
int dayOfMonth = 2;

或按数字获取月份,即1月到12月的1到12。

Month m= Month.of( 2 );

访问我们的Map获取该月的List。传递Month对象会使我们返回到我们放入地图中的List对象。

List< String > list = map.get( m );

访问该List以得到我们想要的String,例如A5

String result = list.get( dayOfMonth - 1 );  // Subtract one for zero-based index. 

或者,将这两行合并为一个,同时访问MapList

String result = map.get( m ).get( dayOfMonth - 1 ); // One-liner, alternative.
  

A5

让我们一起查看所有代码。

Map< Month, List< String > > map = Map.ofEntries(
        entry( Month.JANUARY , List.of( "A1" , "A2" , "A3" ) ) ,  // This syntax requires at top:    import static java.util.Map.entry ;
        entry( Month.FEBRUARY , List.of( "A4" , "A5" , "A6" ) ) ,
        entry( Month.MARCH , List.of( "A7" , "A8" , "A9" ) )
);

Month m = Month.FEBRUARY;                             // Or, Month.of( 2 )
int dayOfMonth = 2;

List< String > list = map.get( m );                   // Passing a `Month` object gets us back the `List` object we had put into the map.
String result = list.get( dayOfMonth - 1 );           // Subtract one for zero-based index counting to access `List`. 

String result2 = map.get( m ).get( dayOfMonth - 1 );  // One-liner, alternative.