package Ġcity . new nan . m cron Ċ Ċ import Ġjava . time . DayOfWeek Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Offset Ċ import Ġjava . time . temporal . Temporal Adjust ers Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashMap ĊĊ Ċ /** Ċ Ġ* Ġ å®ļæĹ¶ è¡¨è¾¾å¼ı ç±» ï¼Į æ¯Ķ Linux çļĦ cron è¡¨è¾¾å¼ı å¤ļ äºĨä¸Ģä¸ª " ç§Ĵ æııè¿° " Ċ Ġ* Ġ@ param Ġexpression String Ġcron è¡¨è¾¾å¼ı ï¼Į ä½Ĩæĺ¯ æ¯Ķ Linux çļĦ cron è¡¨è¾¾å¼ı å¤ļ äºĨä¸Ģä¸ª " ç§Ĵ æııè¿° " Ċ Ġ*/ Ċ class ĠC ron Expression ( expression String : ĠString ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsecond List : ĠInt Array ĊĠĠĠ Ġprivate Ġval Ġminute List : ĠInt Array ĊĠĠĠ Ġprivate Ġval Ġhour List : ĠInt Array ĊĠĠĠ Ġprivate Ġval Ġmonth List : ĠInt Array ĊĠĠĠ Ġprivate Ġval Ġavailable Regular DayOfWeek : ĠList < Boolean >? ĊĊĠĠĠ Ġ// Ġ èĻļæĭŁ è½¬ è½® ç®Ĺæ³ķ ĊĠĠĠ Ġ// Ġ å¾Ī ç®Ģåįķ ï¼Į ç§Ĵ âĨĴ åĪĨ âĨĴ æĹ¶ âĨĴ å¤© âĨĴ æľĪ âĨĴ å¹´ ĊĠĠĠ Ġprivate Ġvar Ġsecond List Pointer Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġminute List Pointer Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġhour List Pointer Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġday Pointer Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmonth List Pointer Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġyear Pointer Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠC ron è¡¨è¾¾å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġval Ġexpression String : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¯ « ç§Ĵ æĹ¶éĹ´ æĪ ³ ï¼Į æľ¬åľ° æĹ¶éĹ´ ï¼Į ä¹Łå°±æĺ¯ è¯´ ï¼Į ä¸įæĺ¯ ä»İ æłĩåĩĨ æł¼ æŀĹ å°¼ æ²» æĹ¶éĹ´ 1 9 7 0 å¹´ å¼Ģå§ĭ ï¼Į èĢĮ æĺ¯ åŁºäºİ çİ°åľ¨ çļĦ æĹ¶ åĮº ĊĠĠĠĠ Ġ* Ġ åĢ¼ä¸º 0 ï¼Į ä»£è¡¨ çĿĢ å·²ç»ı æ²¡æľī ä¸ĭ ä¸Ģæ¬¡ ï¼Į è¯¥ è¡¨è¾¾å¼ı å·² å¤± æķĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġnext Time : ĠLong Ġ= Ġ 1 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ è¡¨è¾¾å¼ı åĪĨ åī² ĊĠĠĠĠĠĠĠ Ġval Ġexpression Spl its Ġ= Ġexpression String . split (" Ġ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ç§Ĵ è§£æŀĲ ĊĠĠĠĠĠĠĠ Ġsecond List Ġ= Ġparse ToArray ( expression Spl its [ 0 ], Ġ 6 0 , ĠLE G AL _ SECOND _ INTERVAL _ LIST , Ġnull , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪĨ è§£æŀĲ ĊĠĠĠĠĠĠĠ Ġminute List Ġ= Ġparse ToArray ( expression Spl its [ 1 ], Ġ 6 0 , ĠLE G AL _ MINUTE _ INTERVAL _ LIST , Ġnull , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠæĹ¶ è§£æŀĲ ĊĠĠĠĠĠĠĠ Ġhour List Ġ= Ġparse ToArray ( expression Spl its [ 2 ], Ġ 2 4 , ĠLE G AL _ HOUR _ INTERVAL _ LIST , Ġnull , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ æľĪ è§£æŀĲ ĊĠĠĠĠĠĠĠ Ġmonth List Ġ= Ġparse ToArray ( expression Spl its [ 4 ], Ġ 1 3 , ĠLE G AL _ MONTH _ INTERVAL _ LIST , ĠMON TH _ NAME _ MAP , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ å¸¸ è§Ħ åĳ¨ è§£æŀĲ ĊĠĠĠĠĠĠĠ Ġavailable Regular DayOfWeek Ġ= Ġparse Regular DayOfWeek List ( expression Spl its [ 5 ]) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åŃĺåĤ¨ è¡¨è¾¾å¼ı ĊĠĠĠĠĠĠĠ Ġthis . expression String Ġ= Ġexpression String ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ å·¥ä½ľ ĊĠĠĠĠĠĠĠ Ġtick Next ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ è¯¥ è¡¨è¾¾å¼ı åľ¨ æľª æĿ¥çļĦ æľĢè¿ĳ ä¸Ģæ¬¡ æī§è¡Į æĹ¶éĹ´ ĊĠĠĠĠ Ġ* Ġ@ return Ġ æľª æĿ¥ æľĢè¿ĳ ä¸Ģæ¬¡ æī§è¡Į çļĦ æ¯ « ç§Ĵ æĹ¶éĹ´ æĪ ³ ( æľ¬åľ° æĹ¶éĹ´ ï¼Į èĢĥèĻĳ æĹ¶ åĮº ) ï¼Ľ å¦Ĥæŀľ è¡¨è¾¾å¼ı å·² å¤± æķĪ ï¼Į åį³ ä¸įåŃĺåľ¨ æľª æĿ¥ æ»¡è¶³ æĿ¡ä»¶ çļĦ æī§è¡Į æĹ¶ åĪ» ï¼Į åĪĻ è¿ĶåĽŀ 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetNext Time (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ å¤± æķĪ çļĦ è¡¨è¾¾å¼ı ï¼Į æ²¡æľī ä¸ĭ ä¸Ģæ¬¡ äºĨ ĊĠĠĠĠĠĠĠ Ġif Ġ( next Time Ġ== Ġ 0 L ) Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ// Ġ èİ·å¾Ĺ å½ĵåīį æĹ¶éĹ´ ĊĠĠĠĠĠĠĠ Ġval Ġcur Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ å½ĵåīį æĹ¶éĹ´ å·² æĻ ļ äºİ ä¸Ĭ æ¬¡ é¢Ħ è®¡ æī§è¡Į çļĦæĹ¶éĹ´ ï¼Į éĤ£ä¹Ī å°± è®¡ç®Ĺ ä¸ĭ ä¸Ģæ¬¡ æī§è¡Į æĹ¶éĹ´ ĊĠĠĠĠĠĠĠ Ġ// Ġ æĪĸèĢħ ï¼Į è¡¨è¾¾å¼ı å¤± æķĪ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( cur Time Ġ>= Ġnext Time Ġ|| Ġnext Time Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Next ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnext Time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ æĹ¶ åĪ» ï¼Į æĪĸèĢħ åĪĿå§ĭåĮĸ èİ·å¾Ĺ æľĢè¿ĳ çļĦ ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ æĹ¶ åĪ» ĊĠĠĠĠ Ġ* Ġ@ param Ġinit Flag ĠåĪĿå§ĭåĮĸ æłĩ å¿Ĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtick Next ( init Flag : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ åĪĿå§ĭåĮĸ æ¨¡å¼ı ĊĠĠĠĠĠĠĠ Ġif Ġ( init Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĩį ç½® è½¬ è½® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond List Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminute List Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhour List Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth List Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Time Ġ= ĠLocalDateTime . now () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħĪ å®ļä½į ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ å¤© ( åĲ« ä»Ĭå¤© ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtick Next Day ( cur Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ ä»Ĭå¤© ï¼Į éĤ£ä¹Ī æĹ¶ åĪĨ ç§Ĵ ä¹Ł è¦ģ å®ļä½į åĪ° ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ æĹ¶ åĪ» ï¼Ľ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸įæĺ¯ ä»Ĭå¤© ï¼Į æĹ¶ åĪĨ ç§Ĵ åıª è¦ģ æĮĩåĲĳ ç¬¬ä¸Ģä¸ª åı¯çĶ¨ æĹ¶ åĪ» å°±åı¯ä»¥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Time . day OfMonth Ġ== Ġday Pointer Ġ&& Ġcur Time . month Value Ġ== Ġmonth List [ month List Pointer ] Ġ&& Ġcur Time . year Ġ== Ġyear Pointer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond List Pointer Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminute List Pointer Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhour List Pointer Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcarrier : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtmp Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( tmp Ġ< Ġsecond List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Time . second Ġ<= Ġsecond List [ tmp ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ éĥ½ æ²¡ æī¾åĪ° ï¼Į å°± è¯´æĺİ éľĢè¦ģ åĪ° ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ åĪĨ éĴŁ åİ» æī¾ ï¼Į æķħ è¿Ľ ä½į å¹¶ æĮĩåĲĳ ç¬¬ä¸Ģä¸ª åı¯çĶ¨ ç§Ĵ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tmp Ġ== Ġsecond List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿Ľ ä½į 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcarrier Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond List Pointer Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcarrier Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond List Pointer Ġ= Ġtmp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( tmp Ġ< Ġminute List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Time . minute Ġ+ Ġcarrier Ġ<= Ġminute List [ tmp ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ éĥ½ æ²¡ æī¾åĪ° ï¼Į å°± è¯´æĺİ éľĢè¦ģ åĪ° ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ å°ı æĹ¶ åİ» æī¾ ï¼Į æķħ è¿Ľ ä½į å¹¶ æĮĩåĲĳ ç¬¬ä¸Ģä¸ª åı¯çĶ¨ æĹ¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tmp Ġ== Ġminute List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿Ľ ä½į 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcarrier Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminute List Pointer Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcarrier Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminute List Pointer Ġ= Ġtmp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( tmp Ġ< Ġhour List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Time . hour Ġ+ Ġcarrier Ġ<= Ġhour List [ tmp ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æ²¡æľī æī¾åĪ° ï¼Į è¯´æĺİ ä»Ĭå¤© æ²¡æľī åı¯ çĶ¨çļĦ æĹ¶éĹ´ ï¼Į éľĢè¦ģ åĪ° ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ å¤© åİ» æī¾ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tmp Ġ== Ġhour List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond List Pointer Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminute List Pointer Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhour List Pointer Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick Next Day ( cur Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhour List Pointer Ġ= Ġtmp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸įæĺ¯ åĪĿå§ĭåĮĸ æ¨¡å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond List Pointer Ġ= Ġ( second List Pointer Ġ+ Ġ 1 ) Ġ% Ġsecond List . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( second List Pointer Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminute List Pointer Ġ= Ġ( minute List Pointer Ġ+ Ġ 1 ) Ġ% Ġminute List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( minute List Pointer Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhour List Pointer Ġ= Ġ( hour List Pointer Ġ+ Ġ 1 ) Ġ% Ġhour List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hour List Pointer Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick Next Day ( LocalDateTime . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ è¯´æĺİ è¯¥ è¡¨è¾¾å¼ı å·² å¤± æķĪ ï¼Į æ²¡æľī ä¸ĭ ä¸Ģæ¬¡ åı¯ æī§è¡Į çļĦæĹ¶éĹ´ äºĨ ĊĠĠĠĠĠĠĠ Ġif Ġ( next Time Ġ== Ġ 0 L ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æĹ¶éĹ´ æĪ ³ ï¼Į èĢĥèĻĳ æĹ¶ åĮº ĊĠĠĠĠĠĠĠ Ġnext Time Ġ= ĠLocalDateTime . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Pointer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth List [ month List Pointer ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Pointer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhour List [ hour List Pointer ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminute List [ minute List Pointer ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond List [ second List Pointer ] ĊĠĠĠĠĠĠĠ Ġ). to Instant ( local Timezone Offset ). to Epoch Milli () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿Ľ åĪ° ä¸ĭ ä¸Ģ å¤© ĊĠĠĠĠ Ġ* Ġ çĶ±äºİ å¹´ æľĪ æĹ¥ + åĳ¨ éĥ½æĺ¯ çĽ¸ äºĴ åħ³èģĶ çļĦ ï¼Į ä¸įèĥ½ æĭ Ĩ å¼Ģ ï¼Į æīĢä»¥ è¦ģ ä¸Ģèµ· èĢĥèĻĳ ĊĠĠĠĠ Ġ* Ġ@ param Ġcur Time ĠLocalDateTime å®ŀä¾ĭ ï¼Į å½ĵåīį æĹ¶éĹ´ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtick Next Day ( cur Time : ĠLocalDateTime ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ è¡¨è¾¾å¼ı åĪĨ åī² ĊĠĠĠĠĠĠĠ Ġval Ġexpression Spl its Ġ= Ġexpression String . split (" Ġ"). to Typed Array () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ å¾ªçİ¯ æŁ¥æī¾ ĊĠĠĠĠĠĠĠ Ġ// Ġ é¦ĸåħĪ çľĭ çľĭ èĥ½ ä¸įèĥ½ çĽ´æİ¥ æī¾åĪ° æľ¬ æľĪ çļĦ ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ æĹ¥ ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æī¾ ä¸įåĪ° ( Day Ġof ĠMonth ãĢģ Day Ġof ĠWeek åĴĮ æľĪ å¤© æķ° ä¸īä¸ª æĿ¡ä»¶ )ï¼Į å°± éľĢè¦ģ æī¾ ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ æľĪ ĊĠĠĠĠĠĠĠ Ġ// Ġ æī¾ ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ æľĪ ï¼Į å¦Ĥæŀľ æī¾ ä¸įåĪ° å°± éľĢè¦ģ æī¾ ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ å¹´ ï¼Ľ ĊĠĠĠĠĠĠĠ Ġ// ĠæŃ¤ æĹ¶ å¦Ĥæŀľ åŃĺåľ¨ ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ å¹´ å°± ä¸Ģå®ļ åŃĺåľ¨ ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ æľĪ ( åı¯èĥ½ ä¸įåŃĺåľ¨ åı¯çĶ¨ æĹ¥ )ï¼Į åĲ¦åĪĻ æīĢæľī å¹´ ä»½ éĥ½ ä¸įåŃĺåľ¨ åı¯çĶ¨ æľĪ ï¼Į è¿Ļä¸ª åı¯ä»¥ çĶ¨ åıį è¯ģ æ³ķ è¯ģ æĺİ ĊĠĠĠĠĠĠĠ Ġ// Ġ æīĢä»¥ å¯ » æī¾ åı¯çĶ¨ æľĪ ä¸įéľĢè¦ģ while å¾ªçİ¯ ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! find Next Day ( cur Time , Ġexpression Spl its )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æľī ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ å¹´ ä»½ ï¼Į åĪĻ èĩ³ å°ĳ åŃĺåľ¨ ä¸Ģä¸ª åı¯çĶ¨ æľĪ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æīĢä»¥ è¿Ļä¸ª å¾ªçİ¯ æľĢ å¤ļ æī§è¡Į 2 æ¬¡ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! find Next Month ( cur Time )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! find Next Year ( cur Time , Ġexpression Spl its )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ ² ¡ æľī ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ å¹´ ä»½ ï¼Į è¯¥ è¡¨è¾¾å¼ı å·² å¤± æķĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Time Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåľ¨ å½ĵåīį month List Pointer åĨħ å¯ » æī¾ ä¸ĭ ä¸Ģä¸ª æ¯Ķ å½ĵåīį day Pointer å¤§çļĦ åĲĪ æ³ķ day ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ day Pointer ä¸º - 1 ï¼Į åį³ æľª åĪĿå§ĭåĮĸ ï¼Į éĤ£ä¹Ī å¦Ĥæŀľ æľĪ ä»½ ä¸º - 1 åĪĻ çĽ´æİ¥ è¿ĶåĽŀ åİ» åĪĿå§ĭåĮĸ å¹´ ä»½ ï¼Į åĲ¦åĪĻ æĮĩåĲĳ å½ĵåīį å¹´ ä»½ æľĪ ä»½ å¤§äºİ çŃīäºİ å½ĵåīį æĹ¥æľŁ çļĦ ç¬¬ä¸Ģä¸ª æĹ¥ ĊĠĠĠĠ Ġ* Ġ@ param Ġexpression Spl its ĠC ron è¡¨è¾¾å¼ı åĪĨ åī² ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue ä¸º æī¾åĪ° ï¼Į false ä¸º æľª æī¾åĪ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġfind Next Day ( cur Time : ĠLocalDateTime , Ġexpression Spl its : ĠArray < String >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ- 1 ä»£è¡¨ æľª åĪĿå§ĭåĮĸ ĊĠĠĠĠĠĠĠ Ġif Ġ( day Pointer Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Pointer Ġ= Ġif Ġ( month List Pointer Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æľĪ ä»½ ä¹Ł æľª åĪĿå§ĭåĮĸ ï¼Į éĤ£ä¹Ī å°± åħĪ è¿ĶåĽŀ false åİ» æī¾ year ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æľĪ ä»½ åĪĿå§ĭåĮĸ äºĨ ï¼Į å°± æī¾ å½ĵåīį æľĪ ä»½ å¤§äºİ çŃīäºİ å½ĵåīį æĹ¥ çļĦ ç¬¬ä¸Ģä¸ª æĹ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿ĻéĩĮ åħĪ å°Ĩ åħ¶ ç½® ä¸º ä»Ĭå¤© çļĦ åīį ä¸Ģ å¤© æĪĸèĢħ å½ĵ æľĪ 0 å¤© ( æĹ¥ ä»İ 1 å¼Ģå§ĭ )ï¼Į è¿Ļæł· èĩª çĦ¶ å°± æİ¥ ä¸Ĭ äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( year Pointer Ġ== Ġcur Time . year Ġ&& Ġmonth List [ month List Pointer ] Ġ== Ġcur Time . month Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Time . day OfMonth Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ å·²ç»ı æĺ¯ æľĢåĲİ ä¸Ģ å¤© ï¼Į å°± æľ¬ æľĪ å°± æ²¡æľī ä¸ĭ ä¸Ģä¸ª åı¯çĶ¨ æĹ¥ äºĨ ĊĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ å¹¶ è¿ĶåĽŀ false ï¼Į é¦ĸåħĪ åİ» å¯ » æī¾ ä¸Ģä¸ª æĸ° åı¯çĶ¨ æľĪ ä»½ ĊĠĠĠĠĠĠĠ Ġif Ġ( day Pointer Ġ== ĠLAST _ DAY _ OF _ MONTH [ month List [ month List Pointer ]]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ æİ¥ ä¸ĭ æĿ¥çļĦ ä»»åĬ¡ å°±æĺ¯ åİ» æī¾ æ¯Ķ this . day Pointer å¤§çļĦ ç¬¦åĲĪ æĿ¡ä»¶ çļĦ æĹ¥ åŃĲ ĊĠĠĠĠĠĠĠ Ġvar Ġnext Day Ġ= Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġ// Ġ è¦ģ åĲĮæĹ¶ èĢĥèĻĳ ĠDay Ġof ĠMonth ĠåĴĮ ĠDay Ġof ĠWeek ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ äºĮ èĢħ éĥ½æĺ¯ * ï¼Į åĪĻ ä¸º æ¯ıä¸ª æľĪ çļĦ æ¯ı ä¸Ģ å¤© ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ åıªæľī ä¸Ģä¸ª ä¸º * ï¼Į å°± åıª èĢĥèĻĳ ä¸Ģä¸ª ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ éĥ½ ä¸įæĺ¯ * ï¼Į å°±æĺ¯ äºĮ èĢħ ä¹ĭ ä¸Ģ ĊĠĠĠĠĠĠĠ Ġif Ġ( expression Spl its [ 3 ] Ġ== Ġ"*" Ġ&& Ġexpression Spl its [ 5 ] Ġ== Ġ"* ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Day Ġ= Ġday Pointer Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthe Date Ġ= ĠLocalDateTime . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Pointer , Ġmonth List [ month List Pointer ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , Ġ 0 , Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDay Ġof ĠMonth Ġ éĥ¨åĪĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expression Spl its [ 3 ] Ġ!= Ġ"* ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( splits Ġin Ġexpression Spl its [ 3 ]. split ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯ĨåĪ« Ġ' L ' Ġæ¯ı ä¸ª æľĪ çļĦ æľĢåĲİ ä¸Ģ å¤© ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( splits Ġ== Ġ" L ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Day OfMonth Ġ= Ġthe Date . with ( Temporal Adjust ers . last Day OfMonth ()). day OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Day OfMonth Ġ< Ġnext Day ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Day Ġ= Ġlast Day OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯ĨåĪ« Ġ' W ' Ġæ¯ı ä¸ª æľĪ ç¬¬ä¸Ģä¸ª å·¥ä½ľ æĹ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( splits Ġ== Ġ" W ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfirst Week day Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday OfWeek InThe Month Ġ= Ġthe Date . day OfWeek ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( day OfWeek InThe Month Ġ== ĠDay OfWeek . S ATUR DAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Week day Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( day OfWeek InThe Month Ġ== ĠDay OfWeek . S UND AY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Week day Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Week day Ġin Ġ( day Pointer Ġ+ Ġ 1 ) Ġuntil Ġnext Day ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Day Ġ= Ġfirst Week day ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĮī Ġ'-' ĠåĪĨ åī² ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Spl its Ġ= Ġsplits . split ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sub Spl its . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= Ġsub Spl its [ 0 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Ġ= Ġsub Spl its [ 1 ]. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ è¿Ļä¸ª åĮº éĹ´ åľ¨ ä¸ĭ ä¸Ģ å¤© å·² è¿ĩ åİ» ï¼Į å°± å¿½ çķ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Ġ<= Ġday Pointer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸ĭ ä¸Ģ å¤© å¤Ħ äºİ åĮº éĹ´ åĨħ ï¼Į å°± åıĸ ç¬¬äºĮ å¤© ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Ġ<= Ġday Pointer Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Day Ġ= Ġyear Pointer Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸ĭ ä¸Ģ å¤© çļĦæĹ¶åĢĻ è¯¥ åĮº éĹ´ è¿ĺ æľª å¼Ģå§ĭ ï¼Į å°± çľĭ çľĭ è¿Ļä¸ª åĮº éĹ´ çļĦ å¼Ģå§ĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Ġ< Ġnext Day ) Ġnext Day Ġ= Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĹ¥ çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġsub Spl its [ 0 ]. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ è¿Ļä¸ª å¹´ ä»½ åľ¨ ä¹ĭåīį å¹´ ä»½ ä¹ĭåĲİ ï¼Į å°±åı¯ä»¥ èĢĥèĻĳ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġin Ġ( day Pointer Ġ+ Ġ 1 ) Ġuntil Ġnext Day ) Ġnext Day Ġ= Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDay Ġof ĠWeek Ġ éĥ¨åĪĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expression Spl its [ 5 ] Ġ!= Ġ"* ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( splits Ġin Ġexpression Spl its [ 5 ]. split ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħĪ ä»İ è¡¨ éĩĮéĿ¢ æī¾ æľĢè¿ĳ çļĦ æĹ¥æľŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( available Regular DayOfWeek Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å®ļä¹ī ç¬¬äºĮ å¤© èĢĮä¸įæĺ¯ ç¬¬ä¸Ģ å¤© ï¼Į åĽłä¸º ç¬¬ä¸Ģ å¤© åı¯èĥ½ æĺ¯ éĿŀ æ³ķ çļĦ ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Date Ġ= ĠLocalDateTime . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Pointer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonth List [ month List Pointer ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday Pointer Ġ+ Ġ 1 , Ġ 0 , Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur DayOfWeek Ġ= Ġsecond Date . day OfWeek . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtmp Day Ġ= Ġday Pointer Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġcur DayOfWeek ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( available Regular DayOfWeek [ i ]) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Day ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġif Ġ( i Ġ== Ġ 7 ) Ġ 1 Ġelse Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tmp Day Ġ< Ġnext Day ) Ġnext Day Ġ= Ġtmp Day ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ\ d + #\ d + éĥ¨åĪĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! splits . contains ("- ") Ġ&& Ġsplits . contains ("# ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Spl its Ġ= Ġsplits . split ("# "). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday OfWeek Ġ= ĠDAY OF WEEK _ NAME _ MAP [ sub Spl its [ 0 ]. lowercase ( Locale . getDefault ()) ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum OfWeek Ġ= Ġsub Spl its [ 1 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġthe Date . with ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemp oral Adjust ers . day OfWeek In Month ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum OfWeek , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDay OfWeek . of ( day OfWeek ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). day OfMonth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( day Ġin Ġ( day Pointer Ġ+ Ġ 1 ) Ġuntil Ġnext Day ) Ġnext Day Ġ= Ġday ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ éĿŀ æ³ķ æĹ¥æľŁ è§Ĩ ä¸º æĹł åı¯çĶ¨ ĊĠĠĠĠĠĠĠ Ġif Ġ( next Day Ġ> ĠLAST _ DAY _ OF _ MONTH [ month List [ month List Pointer ]]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġday Pointer Ġ= Ġnext Day ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåľ¨ å½ĵåīį year Pointer åĨħ å¯ » æī¾ ä¸ĭ ä¸Ģä¸ª æ¯Ķ å½ĵåīį month List Pointer å¤§çļĦ åĲĪ æ³ķ month ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ month List Pointer ä¸º - 1 ï¼Į åį³ æľª åĪĿå§ĭåĮĸ ï¼Į éĤ£ä¹Ī å¦Ĥæŀľ å¹´ ä»½ ä¸º - 1 åĪĻ çĽ´æİ¥ è¿ĶåĽŀ åİ» åĪĿå§ĭåĮĸ å¹´ ä»½ ï¼Į åĲ¦åĪĻ æĮĩåĲĳ å½ĵåīį å¹´ ä»½ å¤§äºİ çŃīäºİ å½ĵåīį æľĪ ä»½ çļĦ ç¬¬ä¸Ģä¸ª æľĪ ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue ä¸º æī¾åĪ° ï¼Į false ä¸º æľª æī¾åĪ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġfind Next Month ( cur Time : ĠLocalDateTime ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ- 1 ä»£è¡¨ æľª åĪĿå§ĭåĮĸ ĊĠĠĠĠĠĠĠ Ġif Ġ( month List Pointer Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( year Pointer Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ å¹´ ä»½ ä¹Ł æľª åĪĿå§ĭåĮĸ ï¼Į éĤ£ä¹Ī å°± åħĪ è¿ĶåĽŀ false åİ» æī¾ year ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ å¹´ ä»½ åĪĿå§ĭåĮĸ äºĨ ï¼Į å°± æī¾ å½ĵåīį å¹´ ä»½ å¤§äºİ çŃīäºİ å½ĵåīį æľĪ ä»½ çļĦ ç¬¬ä¸Ģä¸ª æľĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( year Pointer Ġ== Ġcur Time . year ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġmonth List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Time . month Value Ġ<= Ġmonth List [ i ]) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġmonth List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonth List Pointer Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonth List Pointer Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ å·²ç»ı åĪĿå§ĭåĮĸ äºĨ ï¼Į éĤ£ä¹Ī å°± èĩª çĦ¶ è¿Ľ ä¸Ģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth List Pointer Ġ= Ġ( month List Pointer Ġ+ Ġ 1 ) Ġ% Ġmonth List . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĪ° è¾¾ è¿Ľ ä½į å¤Ħ ï¼Į æľĪ å¤į ä½į ï¼Į è¿ĶåĽŀ false ä»¥ æĽ´æĸ° year ï¼Į å¹¶ åĨį æ¬¡ åĪĿå§ĭåĮĸ month ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( month List Pointer Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonth List Pointer Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ åĲ¦åĪĻ ï¼Į è¿ĶåĽŀ true ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåľ¨ å½ĵåīį å¯ » æī¾ ä¸ĭ ä¸Ģä¸ª åı¯ çĶ¨çļĦ å¹´ ä»½ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ year Pointer ä¸º - 1 ï¼Į åį³ æľª åĪĿå§ĭåĮĸ ï¼Į ä¼ļ å®ļä½į åĪ° ç¦» çİ°åľ¨ æľĢè¿ĳ çļĦ æľª æĿ¥ åı¯çĶ¨ å¹´ ä»½ ( åĮħæĭ¬ ä»Ĭ å¹´ ) ĊĠĠĠĠ Ġ* Ġ@ param Ġcur Time ĠLocalDateTime å®ŀä¾ĭ ï¼Į çİ°åľ¨ çļĦæĹ¶éĹ´ æĹ¥æľŁ ĊĠĠĠĠ Ġ* Ġ@ param Ġexpression Spl its ĠC ron è¡¨è¾¾å¼ı åĪĨ åī² ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue ä¸º æī¾åĪ° ï¼Į false ä¸º æľª æī¾åĪ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġfind Next Year ( cur Time : ĠLocalDateTime , Ġexpression Spl its : ĠArray < String >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ- 1 ï¼Į ä»£è¡¨ æľª åĪĿå§ĭåĮĸ ï¼Į éĤ£ä¹Ī å°± å®ļä½į åĪ° æľĢè¿ĳ çļĦ åı¯çĶ¨ å¹´ ä»½ ĊĠĠĠĠĠĠĠ Ġ// Ġ åħĪ æĬĬ year Pointer è®¾ ä¸º åİ» å¹´ ï¼Į çĦ¶åĲİ åĲİ éĿ¢ ä¸Ģæł· å¤ĦçĲĨ å°±åı¯ä»¥ äºĨ ĊĠĠĠĠĠĠĠ Ġif Ġ( year Pointer Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Pointer Ġ= Ġcur Time . year Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æ²¡æľī å¹´ ä»½ æııè¿° æ®µ ï¼Į æĪĸèĢħ è¯ĨåĪ« åĪ° Ġ'*' Ġ éĢļ éħį ç¬¦ ĊĠĠĠĠĠĠĠ Ġif Ġ( expression Spl its . size Ġ== Ġ 6 Ġ|| Ġexpression Spl its [ 6 ] Ġ== Ġ"* ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĤ£ä¹Ī å¹´ ä»½ ç®Ģåįķ åľ° å¢ŀåĬł ä¸Ģ å¹´ å°± å¥½ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Pointer ++ ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲ¦åĪĻ å°± è¦ģ æī¾ æ¯Ķ åħ¶ å¤§çļĦ æľĢå°ı å¹´ ä»½ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Year Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( splits Ġin Ġexpression Spl its [ 6 ]. split ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĮī Ġ'-' ĠåĪĨ åī² ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Spl its Ġ= Ġsplits . split ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sub Spl its . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¹´ ä»½ åĮº éĹ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= Ġsub Spl its [ 0 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Ġ= Ġsub Spl its [ 1 ]. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ è¿Ļä¸ª åĮº éĹ´ åľ¨ ä¸ĭ ä¸Ģ å¹´ å·² è¿ĩ åİ» ï¼Į å°± å¿½ çķ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Ġ<= Ġyear Pointer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸ĭ ä¸Ģ å¹´ å¤Ħ äºİ åĮº éĹ´ åĨħ ï¼Į å°± åıĸ æĺİ å¹´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Ġ<= Ġyear Pointer Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Year Ġ= Ġyear Pointer Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸ĭ ä¸Ģ å¹´ çļĦæĹ¶åĢĻ è¯¥ åĮº éĹ´ è¿ĺ æľª å¼Ģå§ĭ ï¼Į å°± çľĭ çľĭ è¿Ļä¸ª åĮº éĹ´ çļĦ å¼Ģå§ĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Ġ< Ġnext Year ) Ġnext Year Ġ= Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¹´ ä»½ çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġsub Spl its [ 0 ]. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ è¿Ļä¸ª å¹´ ä»½ åľ¨ ä¹ĭåīį å¹´ ä»½ ä¹ĭåĲİ ï¼Į å°±åı¯ä»¥ èĢĥèĻĳ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġin Ġ( year Pointer Ġ+ Ġ 1 ) Ġuntil Ġnext Year ) Ġnext Year Ġ= Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æ²¡æľī æī¾åĪ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Year Ġ== ĠInt . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Time Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Pointer Ġ= Ġnext Year ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è§£æŀĲ åŃĲ è¡¨è¾¾å¼ı ä¸º int [] ç±»åŀĭçļĦ ä½į è¡¨ ĊĠĠĠĠ Ġ* Ġ@ param Ġsub Expression Ġ åŃĲ è¡¨è¾¾å¼ı ï¼Į åºĶ æ»¡è¶³ æŃ£ åĪĻ è¡¨è¾¾å¼ı Ġ(\ d + (- \ d + )? )( ,\ d + (- \ d + )? )* ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue Limit Ġ æķ° åĢ¼ ä¸Ĭ çº¿ ï¼Į æİĴ éĻ¤ éĿŀ æ³ķ æķ° åĢ¼ ï¼Į å¦Ĥ ç§Ĵ æĺ¯ 6 0 ï¼Į æĹ¶ æĺ¯ 2 4 ĊĠĠĠĠ Ġ* Ġ@ return Ġint [] å®ŀä¾ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġparse ToArray ( ĊĠĠĠĠĠĠĠ Ġsub Expression : ĠString , ĊĠĠĠĠĠĠĠ Ġvalue Limit : ĠInt , ĊĠĠĠĠĠĠĠ Ġlegal Interval List : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġoptional Map : ĠMap < String , ĠInt > ?, ĊĠĠĠĠĠĠĠ Ġstart From One : ĠBoolean ĊĠĠĠ Ġ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtmp List Ġ= ĠArrayList < Int >() ĊĠĠĠĠĠĠĠ Ġ// Ġ æĮī Ġ',' ĠåĪĨ åī² ĊĠĠĠĠĠĠĠ Ġfor Ġ( splits Ġin Ġsub Expression . split ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯ĨåĪ« Ġ'*' Ġ éĢļ éħį ç¬¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( splits Ġ== Ġ"* ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ( if Ġ( start From One ) Ġ 1 Ġelse Ġ 0 ) Ġuntil Ġvalue Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatomic List Add ( tmp List , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯ĨåĪ« Ġ' */ d +' Ġ éĹ´ éļĶ éĢļ éħį ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( splits . matches ( Regex ("\\ */ \\ d + "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= ĠparseInt ( splits . split ("/ ")[ 1 ], Ġoptional Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( legal Interval List . contains ( interval )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġif Ġ( start From One ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġvalue Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatomic List Add ( tmp List , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġinterval ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĮī Ġ'-' ĠåĪĨ åī² ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Spl its Ġ= Ġsplits . split ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sub Spl its . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfrom Ġ= ĠparseInt ( sub Spl its [ 0 ], Ġoptional Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġto Ġ= ĠparseInt ( sub Spl its [ 1 ], Ġoptional Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Ġ> Ġvalue Limit ) Ġto Ġ= Ġvalue Limit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( from Ġ< Ġto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatomic List Add ( tmp List , Ġfrom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= ĠparseInt ( sub Spl its [ 0 ], Ġoptional Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number Ġ<= Ġvalue Limit ) Ġatomic List Add ( tmp List , Ġnumber ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠList Ġ-> Ġint [] ĊĠĠĠĠĠĠĠ Ġtmp List . sort () ĊĠĠĠĠĠĠĠ Ġval Ġans Ġ= ĠInt Array ( tmp List . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtmp List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġans [ i ] Ġ= Ġtmp List [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġans ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è§£æŀĲ åĳ¨ è¡¨è¾¾å¼ı ä¸ŃçļĦ å¸¸ è§Ħ éĥ¨åĪĨ ( ä¸į åĲ« ' #' çļĦ éĥ¨åĪĨ ) ĊĠĠĠĠ Ġ* Ġ@ param Ġweek Expression Ġ åĳ¨ è¡¨è¾¾å¼ı ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĳ¨ åı¯çĶ¨ æĥħåĨµ List ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġparse Regular DayOfWeek List ( week Expression : ĠString ): ĠList < Boolean >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < Boolean > Ġ= ĠArrayList ( 8 ) ĊĠĠĠĠĠĠĠ Ġlist . add ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ( week Expression Ġ== Ġ"* ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 7 ) Ġlist . add ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġif Empty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 7 ) Ġlist . add ( false ) ĊĠĠĠĠĠĠĠ Ġ// Ġ æĮī Ġ',' ĠåĪĨ åī² ĊĠĠĠĠĠĠĠ Ġfor Ġ( splits Ġin Ġweek Expression . split ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĮī Ġ'-' ĠåĪĨ åī² ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Spl its Ġ= Ġsplits . split ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sub Spl its . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= ĠDAY OF WEEK _ NAME _ MAP [ sub Spl its [ 0 ]. lowercase ( Locale . getDefault ()) ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Ġ= ĠDAY OF WEEK _ NAME _ MAP [ sub Spl its [ 1 ]. lowercase ( Locale . getDefault ()) ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ<= Ġto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ i ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Empty Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġif Ġ( i Ġ== Ġ 7 ) Ġ 1 Ġelse Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¿½ çķ¥ Ġ\ d + #\ d + ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! splits . contains ("# ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Ġ= ĠDAY OF WEEK _ NAME _ MAP [ sub Spl its [ 0 ]. lowercase ( Locale . getDefault ()) ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ num ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Empty Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( if Empty ) Ġnull Ġelse Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä½¿çĶ¨ æĮĩå®ļçļĦ æĺłå°Ħ Map æĿ¥ è§£æŀĲ èİ·å¾Ĺ æķ´æķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġs Ġ å¾ħ è§£æŀĲ åŃĹç¬¦ä¸² ĊĠĠĠĠ Ġ* Ġ@ param Ġoptional Map Ġ æĺłå°Ħ è¡¨ ĊĠĠĠĠ Ġ* Ġ@ return Ġ è§£æŀĲ å¾ĹåĪ° çļĦ æķ´æķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠparseInt ( s : ĠString , Ġoptional Map : ĠMap < String , ĠInt >? ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( optional Map Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs . toInt () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptional Map [ s . lowercase ( Locale . getDefault ()) ] !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸į éĩįå¤į åľ° æ·»åĬł ä¸Ģä¸ª åħĥç´ł åĪ° List éĩĮ ĊĠĠĠĠ Ġ* Ġ@ param Ġlist ĠList å®ŀä¾ĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġobject Ġ åħĥç´ł å®ŀä¾ĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġ< T > ĠList æ¨¡æĿ¿ ç±»åŀĭ ĊĠĠĠ Ġ</ T > Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġatomic List Add ( list : ĠMutable List < T >, Ġ` object `: ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( list . contains (` object ` )) Ġreturn ĊĠĠĠĠĠĠĠ Ġlist . add (` object `) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated ("") ĊĠĠĠ Ġinternal Ġfun Ġprint Pointer () Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . out . printf (" second : Ġ% d \ n ", Ġsecond List [ second List Pointer ]) ĊĠĠĠĠĠĠĠ ĠSystem . out . printf (" minute : Ġ% d \ n ", Ġmonth List [ minute List Pointer ]) ĊĠĠĠĠĠĠĠ ĠSystem . out . printf (" hour : Ġ% d \ n ", Ġhour List [ hour List Pointer ]) ĊĠĠĠĠĠĠĠ ĠSystem . out . printf (" day : Ġ% d \ n ", Ġday Pointer ) ĊĠĠĠĠĠĠĠ ĠSystem . out . printf (" month : Ġ% d \ n ", Ġmonth List [ month List Pointer ]) ĊĠĠĠĠĠĠĠ ĠSystem . out . printf (" year : Ġ% d \ n ", Ġyear Pointer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLE G AL _ SECOND _ INTERVAL _ LIST Ġ= ĠlistOf ( 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 , Ġ 1 0 , Ġ 1 2 , Ġ 1 5 , Ġ 2 0 , Ġ 3 0 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLE G AL _ MINUTE _ INTERVAL _ LIST Ġ= ĠLE G AL _ SECOND _ INTERVAL _ LIST ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLE G AL _ HOUR _ INTERVAL _ LIST Ġ= ĠlistOf ( 2 , Ġ 3 , Ġ 4 , Ġ 6 , Ġ 8 , Ġ 1 2 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLE G AL _ MONTH _ INTERVAL _ LIST Ġ= ĠlistOf ( 2 , Ġ 3 , Ġ 4 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLAST _ DAY _ OF _ MONTH Ġ= ĠlistOf ( 0 , Ġ 3 1 , Ġ 2 8 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMON TH _ NAME _ MAP : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" jan " Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" jan uary " Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" feb " Ġto Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fe bruary " Ġto Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 " Ġto Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mar " Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" m arch " Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 " Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" apr " Ġto Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" apr il " Ġto Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 4 " Ġto Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" may " Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 5 " Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" jun " Ġto Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" j une " Ġto Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 6 " Ġto Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" jul " Ġto Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" jul y " Ġto Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 7 " Ġto Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" aug " Ġto Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" aug ust " Ġto Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 8 " Ġto Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" se pt " Ġto Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" se ptember " Ġto Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 9 " Ġto Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" oct " Ġto Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" oct ober " Ġto Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 0 " Ġto Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" nov " Ġto Ġ 1 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" nov ember " Ġto Ġ 1 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 1 " Ġto Ġ 1 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" dec " Ġto Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" de cember " Ġto Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 2 " Ġto Ġ 1 2 , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDAY OF WEEK _ NAME _ MAP : ĠHashMap < String , ĠInt > Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mon " Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mon day " Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" t ue " Ġto Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" t uesday " Ġto Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 " Ġto Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" wed " Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" wed nesday " Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 " Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" th u " Ġto Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" th ursday " Ġto Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 4 " Ġto Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" f ri " Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" f riday " Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 5 " Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sat " Ġto Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" s aturday " Ġto Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 6 " Ġto Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sun " Ġto Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" s unday " Ġto Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 " Ġto Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 7 " Ġto Ġ 7 , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlocal Timezone Offset Ġ= ĠZone Offset . of (" Z ") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ éĩįæĸ° è®¾ç½® æĹ¶ åĮº ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġoffset Id ĠæĹ¶ åĮº ID ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġset TimeZone Offset ( offset Id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Timezone Offset Ġ= ĠZone Offset . of ( offset Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }