رفتن به مطلب
  • 0

چگونگی استفاده از توابع زمان در b4a


mahdilotfi

سوال

سلام بی زحمت اگه میشه یکی چگونگی استفاده از توابع زیر رو بگه :

    DateTime.Add

    DateTime.DateParse

    DateTime.DateTimeParse

    DateTime.GetDayOfWeek

    DateTime.GetHour

    DateTime.TimeParse

    DateTime.TicksPerHour

مثلا چرا وقتی خط زی رو مینویسم 3 رو لاگ میکنه

	Log(DateTime.GetHour(1))

  

لینک ارسال
به اشتراک گذاری در سایت های دیگر

5 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

خیلی ساده هستش.

قبل از هر چیز در صورت استفاده از شبیه ساز ساعت،تاریخ و منطقه زمانی اون رو تنظیم کنید.

در کامپیوتر و سیستم های دیجیتال زمان به صورت یک عدد ذخیره و پردازش میشه که اون عدد معمولا تعداد میلی ثانیه از یک تاریخ و ساعت مشخص و ثابت (00:00:00 1 January 1970 برای اندروید) تا زمان مورد نظر هستش. ویکیپدیا

در واقع تاریخ و ساعت زیر برای اندروید مبنا هستش.

1/1/1970 00:00:00,000

واحدش ممکنه میلی ثانیه یا چیز دیگه ای باشه که بهش یک "تیک" tick میگن.

برای مثال متد زیر زمان حاضر رو به عدد برمیگردونه که برابر هستش با تعداد میلی ثانیه های بین الان تا نیمه شب 1 January 1970

Log(DateTime.Now)

خروجی
logs:
1536343954896

با دو متد زیر می تونید اون عدد رو به فرمت قابل فهم برای انسان تبدیل کنید (تبدیل عدد به متن تاریخ و ساعت).

یعنی عدد 1536343954896 رو که مثلا نشان دهنده تعداد میلی ثانیه از تاریخ " 1 January 1970 " تا الان هستش رو تبدیل میکنه به متنی به این شکل "03/05/2018 22:53:12"

 

Dim d As Long = DateTime.Now
log(d)
Log("d: The date is: " & DateTime.Date(d) & " The time is: " & DateTime.Time(d))

logs:
1536343546370
d: The date is: 09/07/2018 The time is: 22:08:03

مثال کامل و دیگر توضیحات :

Sub Activity_Create(FirstTime As Boolean)
	
DateTime.DateFormat = "MM/dd/yyyy"
DateTime.TimeFormat = "HH:mm:ss"

Dim a As Long = DateTime.TimeParse("13:22:55")
Dim b As Long = DateTime.DateParse("02/23/2017")
Dim c As Long = DateTime.DateTimeParse("04/23/2001","23:11:55")
Dim d As Long = DateTime.Now
Dim t As Long = DateTime.Add(c, 1, 2, 3)

Dim Tomorrow As Long
Tomorrow = DateTime.Add(d, 0, 0, 1)

Log("The date is: " & DateTime.Date(0) & " The time is: " & DateTime.Time(0))

Log("a: The date is: " & DateTime.Date(a) & " The time is: " & DateTime.Time(a))
Log("b: The date is: " & DateTime.Date(b) & " The time is: " & DateTime.Time(b))
Log("c: The date is: " & DateTime.Date(c) & " The time is: " & DateTime.Time(c))
Log("d=" & d)
Log("d: The date is: " & DateTime.Date(d) & " The time is: " & DateTime.Time(d))
Log("t: The date is: " & DateTime.Date(t) & " The time is: " & DateTime.Time(t))
Log("Tomorrow: The date is: " & DateTime.Date(Tomorrow) & " The time is: " & DateTime.Time(Tomorrow))
Log("----------")
Log(DateTime.TicksPerMinute)
Log(DateTime.TicksPerHour)
Log(DateTime.TicksPerDay)
Log("----------")
Log(DateTime.Date(DateTime.Now) &" "& DateTime.Time(DateTime.Now))
Log(DateTime.GetDayOfWeek(DateTime.Now))
Log(DateTime.GetDayOfWeek(Tomorrow))
Log(DateTime.GetHour(DateTime.Now))
Log("----------")
Dim bt As Long = 0 
Log(DateTime.Date(bt) & " "& DateTime.Time(bt))
Log(DateTime.GetHour(bt))
DateTime.SetTimeZone(4.5)
Log(DateTime.GetHour(bt))
DateTime.SetTimeZone(0.0)
Log(DateTime.GetHour(bt))
	
End Sub

خروجی برنامه
logs:

The date is: 01/01/1970 The time is: 03:30:00
a: The date is: 09/07/2018 The time is: 13:22:55
b: The date is: 02/23/2017 The time is: 00:00:00
c: The date is: 04/23/2001 The time is: 23:11:55
d=1536348387036
d: The date is: 09/07/2018 The time is: 23:56:27
t: The date is: 06/26/2002 The time is: 23:11:55
Tomorrow: The date is: 09/08/2018 The time is: 23:56:27
----------
60000
3600000
86400000
----------
09/07/2018 23:56:27
6
7
23
----------
01/01/1970 03:30:00
3
4
0

با دو متد زیر

DateTime.DateFormat = "MM/dd/yyyy"
DateTime.DateFormat = "yyyy-MM-dd"
DateTime.TimeFormat = "HH:mm:ss"

فرمت متنی تاریخ و ساعت رو مشخص میکنید که برای تبدیل زمان (تعداد تیک ها یا میلی ثانیه ها) به متن زمان-ساعت و یا برعکسش استفاده میشه .

علائم خاصی داره که میتونید برای مثال تو این لینک ببینید.

سه متد زیر زمان و تاریخ رو به متن میگیره و به عدد قابل پردازش توسط سیستم (تعداد میلی ثانیه ها یا تیک ها) تبدیل میکنه

Dim a As Long = DateTime.TimeParse("13:22:55")
Dim b As Long = DateTime.DateParse("02/23/2017")
Dim c As Long = DateTime.DateTimeParse("04/23/2001","23:11:55")

این کد 1 سال و 2 ماه 3 روز به تاریخ مورد نظر اضافه میکنه

Dim t As Long = DateTime.Add(c, 1, 2, 3)

این کد یک روز به تاریخ مورد نظر اضافه میکنه که میشه فردای اون روز

Dim Tomorrow As Long
Tomorrow = DateTime.Add(d, 0, 0, 1)

کد زیر تعداد میلی ثانیه در روز رو برمیگردونه که برابر هستش با

24*60*60*1000=86400000
Log(DateTime.TicksPerDay)

کد زیر تاریخ رو میگیره و روز هفته رو به عدد برمیگردونه

Log(DateTime.GetDayOfWeek(DateTime.Now))
به صورت پیشفرض
1 یکشنبه
2 دوشنبه
3 سه شنبه
4 چهارشنبه
5 پنج شنبه
6 جمعه
7 شنبه

کد زیر ساعت رو بر میگردونه

Log(DateTime.GetHour(DateTime.Now))

با متد زیر می تونید منطقه زمانی رو تعییر بدید

DateTime.SetTimeZone(4.5)
+4:30 = 4.5
-3:45 = - 3.75 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 3 ساعت قبل، mahdilotfi گفته است :

مثلا چرا وقتی خط زی رو مینویسم 3 رو لاگ میکنه


	Log(DateTime.GetHour(1))

  

1 میلی ثانیه بعد از تاریخ مبنا میشه

1/1/1970 00:00:00,001

که میشه ساعت 0 یا 12 بامداد

پس چرا ساعت 3 رو برمیگردونه ؟

چون منطقه زمانی گوشی احتمالا روی +3 یا مثلا 3:30+ تنظیم شده و در اون منطقه و در اون تاریخ و ساعت، ساعت 3 بامداد هستش.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 ساعت قبل، rasool.g گفته است :

1 میلی ثانیه بعد از تاریخ مبنا میشه


1/1/1970 00:00:00,001

که میشه ساعت 0 یا 12 بامداد

پس چرا ساعت 3 رو برمیگردونه ؟

چون منطقه زمانی گوشی احتمالا روی +3 یا مثلا 3:30+ تنظیم شده و در اون منطقه و در اون تاریخ و ساعت، ساعت 3 بامداد هستش.

 

در 2 ساعت قبل، rasool.g گفته است :

خیلی ساده هستش.

قبل از هر چیز در صورت استفاده از شبیه ساز ساعت،تاریخ و منطقه زمانی اون رو تنظیم کنید.

در کامپیوتر و سیستم های دیجیتال زمان به صورت یک عدد ذخیره و پردازش میشه که اون عدد معمولا تعداد میلی ثانیه از یک تاریخ و ساعت مشخص و ثابت (00:00:00 1 January 1970 برای اندروید) تا زمان مورد نظر هستش. ویکیپدیا

در واقع تاریخ و ساعت زیر برای اندروید مبنا هستش.


1/1/1970 00:00:00,000

واحدش ممکنه میلی ثانیه یا چیز دیگه ای باشه که بهش یک "تیک" tick میگن.

برای مثال متد زیر زمان حاضر رو به عدد برمیگردونه که برابر هستش با تعداد میلی ثانیه های بین الان تا نیمه شب 1 January 1970


Log(DateTime.Now)

خروجی
logs:
1536343954896

با دو متد زیر می تونید اون عدد رو به فرمت قابل فهم برای انسان تبدیل کنید (تبدیل عدد به متن تاریخ و ساعت).

یعنی عدد 1536343954896 رو که مثلا نشان دهنده تعداد میلی ثانیه از تاریخ " 1 January 1970 " تا الان هستش رو تبدیل میکنه به متنی به این شکل "03/05/2018 22:53:12"

 


Dim d As Long = DateTime.Now
log(d)
Log("d: The date is: " & DateTime.Date(d) & " The time is: " & DateTime.Time(d))

logs:
1536343546370
d: The date is: 09/07/2018 The time is: 22:08:03

مثال کامل و دیگر توضیحات :


Sub Activity_Create(FirstTime As Boolean)
	
DateTime.DateFormat = "MM/dd/yyyy"
DateTime.TimeFormat = "HH:mm:ss"

Dim a As Long = DateTime.TimeParse("13:22:55")
Dim b As Long = DateTime.DateParse("02/23/2017")
Dim c As Long = DateTime.DateTimeParse("04/23/2001","23:11:55")
Dim d As Long = DateTime.Now
Dim t As Long = DateTime.Add(c, 1, 2, 3)

Dim Tomorrow As Long
Tomorrow = DateTime.Add(d, 0, 0, 1)

Log("The date is: " & DateTime.Date(0) & " The time is: " & DateTime.Time(0))

Log("a: The date is: " & DateTime.Date(a) & " The time is: " & DateTime.Time(a))
Log("b: The date is: " & DateTime.Date(b) & " The time is: " & DateTime.Time(b))
Log("c: The date is: " & DateTime.Date(c) & " The time is: " & DateTime.Time(c))
Log("d=" & d)
Log("d: The date is: " & DateTime.Date(d) & " The time is: " & DateTime.Time(d))
Log("t: The date is: " & DateTime.Date(t) & " The time is: " & DateTime.Time(t))
Log("Tomorrow: The date is: " & DateTime.Date(Tomorrow) & " The time is: " & DateTime.Time(Tomorrow))
Log("----------")
Log(DateTime.TicksPerMinute)
Log(DateTime.TicksPerHour)
Log(DateTime.TicksPerDay)
Log("----------")
Log(DateTime.Date(DateTime.Now) &" "& DateTime.Time(DateTime.Now))
Log(DateTime.GetDayOfWeek(DateTime.Now))
Log(DateTime.GetDayOfWeek(Tomorrow))
Log(DateTime.GetHour(DateTime.Now))
Log("----------")
Dim bt As Long = 0 
Log(DateTime.Date(bt) & " "& DateTime.Time(bt))
Log(DateTime.GetHour(bt))
DateTime.SetTimeZone(4.5)
Log(DateTime.GetHour(bt))
DateTime.SetTimeZone(0.0)
Log(DateTime.GetHour(bt))
	
End Sub

خروجی برنامه
logs:

The date is: 01/01/1970 The time is: 03:30:00
a: The date is: 09/07/2018 The time is: 13:22:55
b: The date is: 02/23/2017 The time is: 00:00:00
c: The date is: 04/23/2001 The time is: 23:11:55
d=1536348387036
d: The date is: 09/07/2018 The time is: 23:56:27
t: The date is: 06/26/2002 The time is: 23:11:55
Tomorrow: The date is: 09/08/2018 The time is: 23:56:27
----------
60000
3600000
86400000
----------
09/07/2018 23:56:27
6
7
23
----------
01/01/1970 03:30:00
3
4
0

با دو متد زیر


DateTime.DateFormat = "MM/dd/yyyy"
DateTime.DateFormat = "yyyy-MM-dd"
DateTime.TimeFormat = "HH:mm:ss"

فرمت متنی تاریخ و ساعت رو مشخص میکنید که برای تبدیل زمان (تعداد تیک ها یا میلی ثانیه ها) به متن زمان-ساعت و یا برعکسش استفاده میشه .

علائم خاصی داره که میتونید برای مثال تو این لینک ببینید.

سه متد زیر زمان و تاریخ رو به متن میگیره و به عدد قابل پردازش توسط سیستم (تعداد میلی ثانیه ها یا تیک ها) تبدیل میکنه


Dim a As Long = DateTime.TimeParse("13:22:55")
Dim b As Long = DateTime.DateParse("02/23/2017")
Dim c As Long = DateTime.DateTimeParse("04/23/2001","23:11:55")

این کد 1 سال و 2 ماه 3 روز به تاریخ مورد نظر اضافه میکنه


Dim t As Long = DateTime.Add(c, 1, 2, 3)

این کد یک روز به تاریخ مورد نظر اضافه میکنه که میشه فردای اون روز


Dim Tomorrow As Long
Tomorrow = DateTime.Add(d, 0, 0, 1)

کد زیر تعداد میلی ثانیه در روز رو برمیگردونه که برابر هستش با


24*60*60*1000=86400000

Log(DateTime.TicksPerDay)

کد زیر تاریخ رو میگیره و روز هفته رو به عدد برمیگردونه


Log(DateTime.GetDayOfWeek(DateTime.Now))
به صورت پیشفرض
1 یکشنبه
2 دوشنبه
3 سه شنبه
4 چهارشنبه
5 پنج شنبه
6 جمعه
7 شنبه

کد زیر ساعت رو بر میگردونه


Log(DateTime.GetHour(DateTime.Now))

با متد زیر می تونید منطقه زمانی رو تعییر بدید


DateTime.SetTimeZone(4.5)
+4:30 = 4.5
-3:45 = - 3.75 

 

واقعا خیلی خیلی ممنون

لینک ارسال
به اشتراک گذاری در سایت های دیگر

 

میبخشید من یه سوال دیگه هم دارم 

و داخل activity_create یه سرویس رو استارت میکنم

داخل سرویس یه تایمر فعال میشه و من میخوام فعال بمونه

اما وقتی روی دکمه بک کلیک میشه و اکتیویتی برنامه بسته میشه اون تایمر هم غیر فعال میشه

میخواستم بدونم چطوری میشه کاری کرد که فعال بمونه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 1 ساعت قبل، mahdilotfi گفته است :

 

میبخشید من یه سوال دیگه هم دارم 

و داخل activity_create یه سرویس رو استارت میکنم

داخل سرویس یه تایمر فعال میشه و من میخوام فعال بمونه

اما وقتی روی دکمه بک کلیک میشه و اکتیویتی برنامه بسته میشه اون تایمر هم غیر فعال میشه

میخواستم بدونم چطوری میشه کاری کرد که فعال بمونه

سلام. باید یه موضوع جدا گونه ایجاد کنید یا تو موضوع های مرتبط مثل موضوع زیر سوالتون رو بپرسید. اونجا کامل تر بهتون جواب میدم.

در جواب سوالتون باید سرویس رو foreground کنید.

Android Tutorial - Automatic Foreground Mode | B4X Community - Android, iOS, desktop, server and IoT programming tools

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...