2014-09-27 3 views
2

У меня есть этот код, но он терпит неудачу. Зачем?Как получить сегодняшний день и преобразовать его в строку с помощью 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)' не удалось

+0

Извините, я хочу принять текущую дату, сегодняшнюю дату. – txasatonga

ответ

2

Я хотел бы предложить использовать GLib.DateTime class для этой цели.

Вы не писали, если хотите, чтобы текущая дата была зависимой от страны или независимой.

зависит от локали, используя format():

var dt = new DateTime.now_local(); 
stdout.puts (dt.format ("%x")); 

Locale независимая, используя 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 

Я взял обычай для rmat из вашего собственного ответа, но я бы не использовал его, поскольку он запутывает, потому что обычно с датами / имеют формат "%m/%d/%Y" или "%m/%d/%y".

Я бы предпочел либо формат по умолчанию для локали (который ожидает пользователь), либо формат ISO 8601, который вы получаете с to_string() или без времени с format ("%F").

1

Из документации:

Если дата-структура получается из g_date_new, это будет безопасно мутировать, но недействительно и, следовательно, небезопасно для календарных вычислений.

Возможно, вы хотите set_time_t, или set_time_val. Если вы хотите сегодняшнюю дату, fecha.set_time_t(time_t());

+0

Спасибо, но вопрос был неправильно установлен. – txasatonga

0

Этот код идет хорошо! Искал в образцах Вала гнома:

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() 
+1

Лучше использовать 'DateTime.format()', см. Мой ответ. –