如何获得今天的日子并使用vala / genie将其转换为字符串?

时间:2014-09-27 10:11:16

标签: string date glib vala genie

我有这个代码,但它失败了。为什么呢?

// 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)'失败

3 个答案:

答案 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_tset_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()