如何在AwesomeWM文本时钟小部件中实现次序天数?
我正在使用编译于Lua 5.3.3的AwesomeWM v4.0-170-g6c24848-dirty,并且我开始自定义我的小部件。
其中之一是时钟,技术上是wibox.widget.textclock()。我已经能够改变format以改变顺序,添加自定义消息,例如“今天是2017年7月23日星期日”,但是…没有关于序数的线索。
我的意思是如何在“23rd”后面添加“rd”,并根据当前日期进行更改,例如“21st”,“22 nd”或“24 th”。
我尝试在格式之前添加一个ordinal变量,然后紧接着一个if-else语句以确定它的值取决于哪天。然而,这并不起作用:我既不能在函数外部“使用”日期格式,也不能在format中实现该变量。
就我所了解,字符串中的变量可以像以下示例一样进行实现:
print("Hello " .. name .. ", the value of key " .. k .. " is " .. v .. "!")
但是,这里不起作用。我已经没有线索了,你能帮我一下吗?
到目前为止,我已经编写了一个通用的“th”日期格式:
mytextclock = wibox.widget.textclock("%a %dth %B, %H:%M ", 60)
……其输出将是:weekoftheweek dayth month,HH,MM。
我在我的 Conky 文件中加了以下内容:
${exec /home/..../scripts/date-ordinal.sh}
date-ordinal.sh 包含:
#!/bin/bash
the_Day=$(date +'%d')
case $the_Day in
1,21,31)
echo "st"
;;
2,22)
echo "nd"
;;
3,23)
echo "rd"
;;
*)
echo "th"
;;
esac
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

Background:
一开始,我在考虑两种解决方案:
1. 从整个输出字符串中选择日期:在程序处理之后,使用一种类似于 Bash
echo $2的 Lua 等价物来…考虑到一种输出格式为
星期几 月 日 hh:mm的输出:**2. 直接处理变量
day**:这意味着要找到一种方法来获得该变量而不使用整个字符串,一旦我们有了它……稍后使用
if-else结构进行处理,具体处理方式将根据其值而变化。出于速度方面的考虑,我选择了第二种方式。与其花费一些代码行来从输出中提取变量,不如从开始就更容易、更干净地获得变量。
因此,我开始使用
%d作为我的主要工作变量,它在 Lua 中用于表示日期中的一天。(出处)主要问题在于将
%d的内容转换为字符串:day = "%d" -- 这应该是一个整数。 daynumber = tostring(day) -- 将其转换为字符串。 lastdigit = tostring(day, -1) print(lastdigit) -- 输出:d。BOOM!失败了。希望有人能在评论中说出原因。如果我打印最后一个字符(-1),输出始终是 d,如果我尝试使用 -2,那么将会得到整个日期值。
我的主要理论基于这样一个事实:在 Lua 解释器中(在你的 shell 中使用
$ lua),打印出来的就只是%d,根本没有整数;但这只是一个假设。更重要的是,就我所读到的,%d在日期上下文中使用,而不是独立作为变量值。一种可能的解决方案:
day = os.date("%d") -- 首先,我们从系统时间中获取了日期。 -- 由于 Lua 显示日期时有两个数字,我们将它们分别存储在变量中,以便稍后单独处理它们。 firstdigit = string.sub(day, 0, 1) lastdigit = string.sub(day, -1) -- 我们不想 Awesome 显示 '01st August' 或 '08th September'。我们将要抑制 '0'。 if firstdigit == "0" then day = lastdigit end -- 现在,我们要将日期与它的序数一起显示:1st、2nd、3rd、4th…我们将使用最后一位数字进行处理。 if lastdigit == "1" then ordinal = "st" elseif lastdigit == "2" then ordinal = "nd" elseif lastdigit == "3" then ordinal = "rd" else ordinal = "th" end -- 最后,我们将显示最终日期。 mytextclock = wibox.widget.textclock(" %a " ..day..ordinal.. " %B %H:%M ", 60)…然后我们会得到以下输出: