Полагаю, я понимаю, о чем вы спрашиваете. Хотя вы говорите, что хотите «вернуть» его (по сути) из метода выборки, достаточно сказать, что вы просто хотите использовать значение, полученное после завершения выборки. Если это так, это то, что вам нужно сделать:
. После того, как ваша выборка завершится успешно, вы можете делать много вещей с переменной. 4а и 4b - некоторые простые примеры:
4a. Изменить. В качестве примера использования вы можете запустить все, что вам нужно для запуска в вашем классе, который использует yourNameVariable
(и вы можете быть уверены, что yourNameVariable
не является нулевым)
4b. Изменить: в качестве примера использования вы можете использовать переменную в функции, которая запускается кнопкой onClickListener.
Попробуйте это.
// 1. Create a variable at the top of your class
private String yourNameVariable;
// 2. Retrieve your value (which you have done mostly correctly)
private void getUserName(String uid) {
databaseReference.child(String.format("users/%s/name", uid))
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// 3. Set the public variable in your class equal to value retrieved
yourNameVariable = dataSnapshot.getValue(String.class);
// 4a. EDIT: now that your fetch succeeded, you can trigger whatever else you need to run in your class that uses `yourNameVariable`, and you can be sure `yourNameVariable` is not null.
sayHiToMe();
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
// (part of step 4a)
public void sayHiToMe() {
Log.d(TAG, "hi there, " + yourNameVariable);
}
// 4b. use the variable in a function triggered by the onClickListener of a button.
public void helloButtonWasPressed() {
if (yourNameVariable != null) {
Log.d(TAG, "hi there, " + yourNameVariable);
}
}
Затем вы может использовать yourNameVariable
, где бы вы ни захотели на протяжении всего вашего класса.
Примечание: просто убедитесь, что вы проверяете, что yourNameVariable
не является нулевым при его использовании, поскольку onDataChange
является асинхронным и может не завершиться в то время, когда вы пытаетесь использовать его в другом месте.
Я думаю, что это просто, так как вы можете конвертировать в любой формат и из любого формата без какой-либо путаницы
DateTime.ParseExact(txt.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture).ToString("yyyy/MM/dd"));
Это почти то же самое, просто используйте метод DateTime.ToString()
, например:
DateTime.Now.ToString("dd/MM/yy");
Или:
DateTime dt = GetDate(); // GetDate() returns some date
dt.ToString("dd/MM/yy");
Кроме того, вам может потребоваться использовать один предопределенных форматов даты / времени, например:
DateTime.Now.ToString("g");
// returns "02/01/2009 9:07 PM" for en-US
// or "01.02.2009 21:07" for de-CH
Они гарантируют, что формат будет правильным, независимо от текущих настроек локали.
Проверьте следующие страницы MSDN для получения дополнительной информации
Дополнительная дополнительная информация:
Если вы хотите отобразить дату в определенной локали / культуре, тогда существует перегрузка метода ToString()
, который принимает IFormatProvider
:
DateTime dt = GetDate();
dt.ToString("g", new CultureInfo("en-US")); // returns "5/26/2009 10:39 PM"
dt.ToString("g", new CultureInfo("de-CH")); // returns "26.05.2009 22:39"
Или, вы можете установить CultureInfo
текущего потока до форматирования даты:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
dt.ToString("g"); // returns "5/26/2009 10:39 PM"
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-CH");
dt.ToString("g"); // returns "26.05.2009 22:39"
Еще лучше, используйте только
DateTime.Now.ToString()
или
DateTime.Now.ToString(CultureInfo.CurrentCulture)
, чтобы использовать формат, который пользователь предпочитает.
Попробуйте следующее:
String.Format("{0:MM/dd/yyyy}", DateTime.Now); // 01/31/2009
String.Format("{0:dd/MM/yyyy}", DateTime.Now); // 31/01/2009
String.Format("{dd/MM/yyyy}", DateTime.Now); // 31/01/2009
Вы также можете записать
DateTime aDate = new DateTime();
string s = aDate.ToShortDateString();
для короткой нотации
или
DateTime aDate = new DateTime();
string s = aDate.ToLongDateString();
для длинной записи типа «воскресенье, 1 февраля , 2009 ".
Или посмотрите MSDN на возможности .ToString (" ??? ");
Я столкнулся с тем же вопросом. Мне нужно было добавить ссылку в верхней части класса и изменить CultureInfo текущего потока.
using System.Threading;
string cultureName = "fr-CA";
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);
DateTime theDate = new DateTime(2015, 11, 06);
theDate.ToString("g");
Console.WriteLine(theDate);
Все, что вам нужно сделать, это изменить название культуры, например : «en-US» = Соединенные Штаты «fr-FR» = франкоязычная Франция «fr-CA» = франкоязычная Канада и т. д. ...