首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >打印当月日历

打印当月日历
EN

Stack Overflow用户
提问于 2018-03-17 17:27:22
回答 1查看 42关注 0票数 0

似乎我的练习没有任何实际用途,但我想了解我的问题在哪里涵盖。我正在尝试打印当前月份的日历(从星期一开始),所以我对解决这个问题的愿景是下一个。首先,它需要得到的总天数在一个月。

代码语言:javascript
代码运行次数:0
运行
复制
 WITH days(total) AS (
    SELECT 1
    UNION ALL
    SELECT total + 1 FROM days
    LIMIT (
       SELECT CAST(
          julianday('now', 'start of month', '+1 month') -
          julianday('now', 'start of month') AS INTEGER
       )
    )
 ) SELECT group_concat(total) FROM days;

第二,如果月份的第一天不是星期一,它需要N个空格。

代码语言:javascript
代码运行次数:0
运行
复制
 WITH days(total) AS (
    WITH spaces(nil) AS (
       SELECT CHAR(32)
       UNION ALL
       SELECT nil FROM spaces
       LIMIT (
          SELECT strftime('%w', julianday('now', 'start of month')) -1
       )
    ) SELECT group_concat(nil) || 1 FROM spaces
    UNION ALL
    SELECT total + 1 FROM days
    LIMIT (
       SELECT CAST(
          julianday('now', 'start of month', '+1 month') -
          julianday('now', 'start of month') AS INTEGER
       )
    )
 ) SELECT group_concat(total) FROM days;

第三,这是两个问题:月的最后一天会丢失,以及如何分割等量块的序列?也许有更好的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-19 18:01:07

找到了这里的溶液。

代码语言:javascript
代码运行次数:0
运行
复制
WITH seg(b, s) AS ( -- split string on segments
   VALUES (1, '')
   UNION ALL
   SELECT b + 21, SUBSTR((
      WITH nil(e) AS ( -- spaces (if not a Monday)
         SELECT CHAR(32)
         UNION ALL
         SELECT e FROM nil
         LIMIT (
            SELECT ( -- Sunday is presented by zero, so fix this
               CASE WHEN dow = CAST(0 AS INTEGER) THEN 7 ELSE dow END
            ) FROM ( -- day of week
               SELECT strftime('%w', julianday('now', 'start of month')) AS dow
            )
         )
      ) SELECT replace( -- replace all commas on spaces
         'Mo,Tu,We,Th,Fr,Sa,Su,' || rtrim(group_concat(printf('%2s', e))) || (
            WITH seq(n) AS ( -- days sequence
               SELECT 1
               UNION ALL
               SELECT n + 1 FROM seq
               LIMIT (
                  SELECT CAST(
                     julianday('now', 'start of month', '+1 month') -
                     julianday('now', 'start of month') AS INTEGER
                  )
               )
            ) SELECT group_concat(printf('%2s', n)) FROM seq
      ), ',', CHAR(32)) FROM nil
   ), b, 21) FROM seg
   LIMIT 8
) SELECT s FROM seg;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49339788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档