我有这个代码,但它失败了。为什么呢?
// tomar la fecha
fecha = GLib.Date();
print "cogiendo"
var s = new StringBuilder("Fecha:");
dia:DateDay= fecha.get_day();
s.append_printf ("%u",dia);
print s.str;
fecha_str=s.str;
Glib回归: g_date_get_day:断言' g_date_valid(d)'失败
答案 0 :(得分:3)
我建议为此目的使用GLib.DateTime
class。
如果您希望将当前日期作为区域设置相关或独立格式,则不会编写。
依赖于区域设置,使用format ()
:
var dt = new DateTime.now_local ();
stdout.puts (dt.format ("%x"));
使用to_string ()
独立于区域设置(请注意,这也包括时间):
var dt = new DateTime.now_local ();
stdout.puts (@"$dt");
使用format ()
自定义格式:
var dt = new DateTime.now_local ();
stdout.puts (dt.format ("%d/%m/%Y")); // 29/09/2014
我从您自己的答案中获取了自定义格式,但我不会使用它,因为它令人困惑,因为通常/
分隔日期的格式为"%m/%d/%Y"
或"%m/%d/%y"
。< / p>
我更喜欢区域设置默认格式(用户期望的格式)或to_string ()
格式format ("%F")
或{{1}}没有时间格式。
答案 1 :(得分:1)
来自文档:
如果Date-struct是从
g_date_new
获得的,那么变异是安全的,但是无效,因此对于日历计算来说是不安全的。
也许您想要set_time_t
或set_time_val
。如果你想要今天的日期,fecha.set_time_t(time_t());
答案 2 :(得分:0)
这段代码很顺利!!在gnome的vala样本中搜索:
var now = new DateTime.now_local ();
fecha_str = now.get_day_of_month ().to_string()+"/"+now.get_month ().to_string()+"/"+now.get_year ().to_string()